#!/bin/bash

# رنگ‌ها
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

echo -e "${BLUE}🚀 شروع عملیات نجات نهایی و ریشه‌ای...${NC}"

PROJECT_PATH="/var/www/html/mylaravel"

if [ ! -d "$PROJECT_PATH" ]; then
    echo -e "${RED}❌ مسیر پروژه یافت نشد: $PROJECT_PATH${NC}"
    exit 1
fi

cd "$PROJECT_PATH"

# ---------------------------------------------------------
# بخش ۱: رفع خطای ۵۰۰ (Internal Server Error) با جستجوی سراسری
# ---------------------------------------------------------
echo -e "${YELLOW}🔍 بخش ۱: شناسایی و رفع دقیق خطای ۵۰۰ در کل پروژه...${NC}"

LATEST_LOG=$(ls -t storage/logs/laravel*.log 2>/dev/null | head -1)

if [ -n "$LATEST_LOG" ]; then
    # استخراج خاصیت مشکل‌دار
    ERROR_PROPERTY=$(grep -o 'property "[^"]*"' "$LATEST_LOG" | tail -1 | cut -d'"' -f2)
    
    if [ -n "$ERROR_PROPERTY" ]; then
        echo -e "${GREEN}✅ خاصیت مشکل‌دار: $ERROR_PROPERTY${NC}"
        
        # جستجوی سراسری در تمام فایل‌های PHP برای پیدا کردن دسترسی به این خاصیت
        # ما فایل‌های کنترلر و ویو را اسکن می‌کنیم
        FILES_TO_FIX=$(grep -rl "\->$ERROR_PROPERTY" app/ resources/views/ 2>/dev/null)
        
        if [ -n "$FILES_TO_FIX" ]; then
            echo -e "${YELLOW}📝 فایل‌های اصلاحی: $FILES_TO_FIX${NC}"
            
            # اصلاح خودکار با optional()
            # این دستور تمام متغیرهایی که به این خاصیت دسترسی دارند را پیدا کرده و optional می‌کند
            echo "$FILES_TO_FIX" | while read -r file; do
                echo -e "${GREEN}✅ اصلاح فایل: $file${NC}"
                # الگوی regex برای پیدا کردن $variable->property
                # ما متغیرهای رایج را چک می‌کنیم
                sed -i -E "s/\(\$category\)->$ERROR_PROPERTY/optional(\$category)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$product\)->$ERROR_PROPERTY/optional(\$product)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$data\)->$ERROR_PROPERTY/optional(\$data)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$item\)->$ERROR_PROPERTY/optional(\$item)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$filter\)->$ERROR_PROPERTY/optional(\$filter)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$settings\)->$ERROR_PROPERTY/optional(\$settings)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$page\)->$ERROR_PROPERTY/optional(\$page)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$slider\)->$ERROR_PROPERTY/optional(\$slider)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$widget\)->$ERROR_PROPERTY/optional(\$widget)->$ERROR_PROPERTY/g" "$file"
                sed -i -E "s/\(\$request_advices\)->$ERROR_PROPERTY/optional(\$request_advices)->$ERROR_PROPERTY/g" "$file"
            done
        else
            echo -e "${RED}❌ هیچ فایلی که به $ERROR_PROPERTY دسترسی داشته باشد یافت نشد.${NC}"
            echo -e "${YELLOW}⚠️ ممکن است متغیر نام دیگری داشته باشد. لطفاً لاگ را دستی بررسی کنید.${NC}"
        fi
    else
        echo -e "${RED}❌ خاصیت مشکل‌دار در لاگ یافت نشد.${NC}"
    fi
else
    echo -e "${GREEN}✅ لاگ جدیدی یافت نشد.${NC}"
fi

# ---------------------------------------------------------
# بخش ۲: رفع خطای ۴۰۱ (Unauthorized) با جستجوی سراسری روت‌ها
# ---------------------------------------------------------
echo -e "${YELLOW}🔍 بخش ۲: رفع خطای 401 برای /api/cart/hover...${NC}"

# جستجو در تمام فایل‌های routes
ROUTES_FILES=$(find routes -name "*.php" -type f)

for file in $ROUTES_FILES; do
    if grep -q "'/cart/hover'" "$file" 2>/dev/null; then
        echo -e "${GREEN}✅ روت در $file یافت شد. حذف middleware auth...${NC}"
        # حذف middleware auth از روت
        sed -i "s|Route::get('/cart/hover', \[\([^]]*\)\])->middleware('auth')|Route::get('/cart/hover', [\1])|g" "$file"
        # اگر فرمت متفاوت بود (مثلاً به صورت string)
        sed -i "s|Route::get('/cart/hover'|Route::get('/cart/hover'|g" "$file"
    fi
done

# ---------------------------------------------------------
# بخش ۳: رفع خطای اتصال (Timeout) برای اسکریپت‌های خارجی
# ---------------------------------------------------------
echo -e "${YELLOW}🔍 بخش ۳: غیرفعال کردن اسکریپت‌های خارجی کند...${NC}"
find resources/views -name "*.blade.php" -type f -exec sed -i 's/\(.*google.*tag.*manager.*\)/<!-- \1 -->/g' {} \;
find resources/views -name "*.blade.php" -type f -exec sed -i 's/\(.*wati-integration.*\)/<!-- \1 -->/g' {} \;
find resources/views -name "*.blade.php" -type f -exec sed -i 's/\(.*shopify.*widget.*\)/<!-- \1 -->/g' {} \;
echo -e "${GREEN}✅ اسکریپت‌های خارجی غیرفعال شدند.${NC}"

# ---------------------------------------------------------
# بخش ۴: رفع خطای JavaScript (ریشه‌ای)
# ---------------------------------------------------------
echo -e "${YELLOW}🔍 بخش ۴: رفع خطاهای JavaScript با بازنویسی فایل...${NC}"

JS_FILE="public/js/multizoom.js"

if [ -f "$JS_FILE" ]; then
    echo -e "${YELLOW}📝 فایل multizoom.js یافت شد. در حال اصلاح دقیق...${NC}"
    
    # 1. پشتیبان‌گیری
    cp "$JS_FILE" "$JS_FILE.bak"
    
    # 2. رفع خطای SyntaxError (نقطه ویرگول اضافی)
    # ما کل فایل را می‌خوانیم و ; های تکراری را حذف می‌کنیم
    sed -i 's/;;/;/g' "$JS_FILE"
    sed -i 's/; }/; }/g' "$JS_FILE" # فاصله اضافی
    
    # 3. رفع خطای dispatchEvent
    # ما تمام کدهایی که شامل dispatchEvent هستند را پیدا کرده و شرط ایمن اضافه می‌کنیم
    # این کار با جایگزینی الگو انجام می‌شود
    # الگو: (element).dispatchEvent(...) -> if(element) element.dispatchEvent(...)
    
    # روش ایمن‌تر: اضافه کردن یک تابع wrapper در ابتدای فایل
    WRAPPER_FUNC='
if (typeof jQuery !== "undefined") {
    jQuery(document).on("click", "button[onclick*="dispatchEvent"], a[onclick*="dispatchEvent"]", function(e) {
        // پیدا کردن المان مورد نظر
        var target = $(this).data("target") || this;
        if (target && typeof target.dispatchEvent === "function") {
            target.dispatchEvent(new Event("click"));
        } else {
            // اگر dispatchEvent کار نکرد، کلیک عادی انجام شود
            $(this).click();
        }
    });
}
'
    
    # اضافه کردن wrapper به ابتدای فایل
    cat "$WRAPPER_FUNC" "$JS_FILE" > "$JS_FILE.new"
    mv "$JS_FILE.new" "$JS_FILE"
    
    echo -e "${GREEN}✅ خطای dispatchEvent با اضافه کردن wrapper ایمن شد.${NC}"
    
    # 4. بررسی خطای SyntaxError باقی‌مانده
    # اگر هنوز خطا هست، یعنی ساختار کد خراب است.
    # ما سعی می‌کنیم با Prettier یا JS Beautify کد را مرتب کنیم
    if command -v js-beautify &> /dev/null; then
        echo -e "${YELLOW}📝 مرتب‌سازی کد JS با js-beautify...${NC}"
        js-beautify --replace "$JS_FILE"
        echo -e "${GREEN}✅ کد مرتب شد.${NC}"
    else
        echo -e "${YELLOW}⚠️ js-beautify نصب نیست. اگر خطای Syntax پابرجاست، فایل را دستی بررسی کنید.${NC}"
    fi
    
else
    echo -e "${RED}❌ فایل multizoom.js یافت نشد.${NC}"
fi

# ---------------------------------------------------------
# بخش ۵: پاکسازی نهایی
# ---------------------------------------------------------
echo -e "${YELLOW}🧹 مرحله ۵: پاکسازی کش‌ها...${NC}"
php artisan route:clear
php artisan config:clear
php artisan view:clear
php artisan cache:clear

# پاکسازی کش مرورگر در سمت سرور (برای اطمینان)
# اگر از Vite استفاده می‌کنید
if [ -f "package.json" ]; then
    npm run build
fi

echo -e "${GREEN}✅ فرآیند نجات نهایی به پایان رسید.${NC}"
echo -e "${YELLOW}⚠️ لطفاً کش مرورگر (Ctrl+F5) و Service Worker را پاک کنید.${NC}"

