#!/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"

# ---------------------------------------------------------
# بخش ۱: رفع خطای ۵۰۰ با جستجوی مستقیم در فایل‌ها
# ---------------------------------------------------------
echo -e "${YELLOW}🔍 بخش ۱: شناسایی فایل کنترلر یا ویوی دارای خطای request_advices_content...${NC}"

# جستجوی مستقیم در تمام فایل‌های PHP برای پیدا کردن رشته "request_advices_content"
# این کار نیازی به اجرای route:list ندارد
FILES_WITH_ERROR=$(grep -rl "request_advices_content" app/ resources/views/ 2>/dev/null)

if [ -n "$FILES_WITH_ERROR" ]; then
    echo -e "${GREEN}✅ فایل‌های دارای خطا یافت شدند:${NC}"
    echo "$FILES_WITH_ERROR"
    
    echo -e "${YELLOW}📝 در حال اصلاح فایل‌ها با استفاده از optional()...\033[0m"
    
    echo "$FILES_WITH_ERROR" | while read -r file; do
        echo -e "${GREEN}✅ اصلاح فایل: $file${NC}"
        
        # اصلاح الگوهای مختلف دسترسی به خاصیت
        # ما فرض می‌کنیم متغیر می‌تواند هر چیزی باشد، اما رایج‌ترین‌ها را چک می‌کنیم
        # الگو: $variable->request_advices_content -> optional($variable)->request_advices_content
        
        # متغیرهای رایج
        sed -i -E 's/\(\$page\)->request_advices_content/optional($page)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$settings\)->request_advices_content/optional($settings)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$data\)->request_advices_content/optional($data)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$request\)->request_advices_content/optional($request)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$category\)->request_advices_content/optional($category)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$product\)->request_advices_content/optional($product)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$slider\)->request_advices_content/optional($slider)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$widget\)->request_advices_content/optional($widget)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$advices\)->request_advices_content/optional($advices)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$content\)->request_advices_content/optional($content)->request_advices_content/g' "$file"
        sed -i -E 's/\(\$item\)->request_advices_content/optional($item)->request_advices_content/g' "$file"
        
        # اگر متغیر نام دیگری دارد، این دستور کلی‌تر عمل می‌کند اما ریسک دارد
        # فقط اگر موارد بالا جواب نداد، از این استفاده کنید (من فعلا غیرفعال می‌کنم)
        # sed -i -E 's/\(\$([a-zA-Z_]+)\)->request_advices_content/optional($1)->request_advices_content/g' "$file"
        
        echo -e "${GREEN}✅ تغییرات در $file اعمال شد.\033[0m"
    done
else
    echo -e "${RED}❌ هیچ فایلی که شامل request_advices_content باشد یافت نشد.${NC}"
    echo -e "${YELLOW}⚠️ ممکن است متغیر با نام دیگری باشد. لطفاً لاگ را دستی بررسی کنید.${NC}"
fi

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

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"
    
    # 3. رفع خطای 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 {
            $(this).click();
        }
    });
}
'
    cat "$WRAPPER_FUNC" "$JS_FILE" > "$JS_FILE.new"
    mv "$JS_FILE.new" "$JS_FILE"
    
    echo -e "${GREEN}✅ خطای dispatchEvent با اضافه کردن wrapper ایمن شد.${NC}"
    
    # 4. مرتب‌سازی کد JS
    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

# پاکسازی کش مرورگر در سمت سرور
if [ -f "package.json" ]; then
    npm run build
fi

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