#!/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}🔍 بخش ۱: شناسایی و رفع دقیق خطای ۵۰۰ در API...${NC}"

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

if [ -n "$LATEST_LOG" ]; then
    # 1.1 استخراج پیام خطای دقیق (مثلاً: Attempt to read property "x" on null)
    ERROR_MSG=$(grep -o "Attempt to read property \"[^\"]*\" on null" "$LATEST_LOG" | tail -1)
    
    if [ -n "$ERROR_MSG" ]; then
        echo -e "${GREEN}✅ خطای دقیق پیدا شد: $ERROR_MSG${NC}"
        
        # 1.2 استخراج نام خاصیت (Property) از پیام خطا
        TARGET_PROPERTY=$(echo "$ERROR_MSG" | grep -o '"[^"]*"' | tr -d '"')
        echo -e "${YELLOW}📝 خاصیت (Property) مشکل‌دار: $TARGET_PROPERTY${NC}"

        # 1.3 پیدا کردن فایل کنترلر مسئول
        # از دستور laravel برای پیدا کردن کنترلر استفاده می‌کنیم
        CONTROLLER_PATH=$(php artisan route:list --json 2>/dev/null | jq -r '.[] | select(.uri | contains("category_filter")) | .action | split("@")[0]')
        
        if [ -n "$CONTROLLER_PATH" ] && [ -f "$CONTROLLER_PATH" ]; then
            echo -e "${GREEN}✅ کنترلر مسئول: $CONTROLLER_PATH${NC}"
            
            # 1.4 اصلاح خودکار با دقت
            # ما تمام متغیرهای رایج را چک می‌کنیم
            sed -i -E "s/\(\$category\)->$TARGET_PROPERTY/optional(\$category)->$TARGET_PROPERTY/g" "$CONTROLLER_PATH"
            sed -i -E "s/\(\$product\)->$TARGET_PROPERTY/optional(\$product)->$TARGET_PROPERTY/g" "$CONTROLLER_PATH"
            sed -i -E "s/\(\$data\)->$TARGET_PROPERTY/optional(\$data)->$TARGET_PROPERTY/g" "$CONTROLLER_PATH"
            sed -i -E "s/\(\$item\)->$TARGET_PROPERTY/optional(\$item)->$TARGET_PROPERTY/g" "$CONTROLLER_PATH"
            sed -i -E "s/\(\$filter\)->$TARGET_PROPERTY/optional(\$filter)->$TARGET_PROPERTY/g" "$CONTROLLER_PATH"
            sed -i -E "s/\(\$settings\)->$TARGET_PROPERTY/optional(\$settings)->$TARGET_PROPERTY/g" "$CONTROLLER_PATH"
            sed -i -E "s/\(\$page\)->$TARGET_PROPERTY/optional(\$page)->$TARGET_PROPERTY/g" "$CONTROLLER_PATH"
            
            echo -e "${GREEN}✅ اصلاحات با موفقیت در $CONTROLLER_PATH اعمال شد.${NC}"
            echo -e "${BLUE}📄 نمونه تغییرات:${NC}"
            grep -n "optional.*$TARGET_PROPERTY" "$CONTROLLER_PATH" | head -3
            
        else
            echo -e "${RED}❌ کنترلر مربوط به category_filter یافت نشد.${NC}"
            echo -e "${YELLOW}⚠️ لطفاً فایل app/Http/Controllers/CategoryController.php را دستی باز کنید و خطای $TARGET_PROPERTY را پیدا کنید.${NC}"
        fi

    else
        echo -e "${YELLOW}⚠️ خطای خاص 'Attempt to read property' یافت نشد. ممکن است خطا متفاوت باشد.${NC}"
        grep -i "error\|exception" "$LATEST_LOG" | tail -5
    fi
else
    echo -e "${GREEN}✅ لاگ جدیدی برای بررسی یافت نشد.${NC}"
fi

# ---------------------------------------------------------
# بخش ۲: رفع خطای ۴۰۱ (Unauthorized) برای /api/cart/hover
# ---------------------------------------------------------
echo -e "${YELLOW}🔍 بخش ۲: رفع خطای 401 برای /api/cart/hover...${NC}"
ROUTES_FILE="routes/api.php"
if [ -f "$ROUTES_FILE" ]; then
    if grep -q "'/cart/hover'" "$ROUTES_FILE" 2>/dev/null; then
        echo -e "${YELLOW}📝 یافت شد در $ROUTES_FILE. حذف middleware auth...${NC}"
        # حذف middleware auth
        sed -i "s|Route::get('/cart/hover', \[\([^]]*\)\])->middleware('auth')|Route::get('/cart/hover', [\1])|g" "$ROUTES_FILE"
        sed -i "s|Route::get('/cart/hover'|Route::get('/cart/hover'|g" "$ROUTES_FILE" # برای اطمینان
        echo -e "${GREEN}✅ روت /api/cart/hover اصلاح شد.${NC}"
    else
        echo -e "${GREEN}✅ روت /api/cart/hover یافت نشد یا قبلاً اصلاح شده.${NC}"
    fi
else
    echo -e "${YELLOW}⚠️ فایل routes/api.php یافت نشد.${NC}"
fi

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

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

# 4.1 رفع خطای خط ۴۴۷ (Unexpected token)
echo -e "${YELLOW}📝 بررسی خطای خط ۴۴۷...${NC}"
JS_FILE_LINE_447=$(find public public/js public/assets resources/views -name "*.js" -o -name "*.blade.php" 2>/dev/null | xargs awk 'NR==447{print FILENAME":"NR":"$0}' 2>/dev/null)

if [ -n "$JS_FILE_LINE_447" ]; then
    # پیدا کردن اولین فایلی که خط ۴۴۷ دارد
    FIRST_FILE=$(echo "$JS_FILE_LINE_447" | head -1 | cut -d':' -f1)
    LINE_CONTENT=$(echo "$JS_FILE_LINE_447" | head -1 | cut -d':' -f3-)
    
    if [ -n "$FIRST_FILE" ] && [ -f "$FIRST_FILE" ]; then
        echo -e "${RED}❌ خطای Syntax در فایل $FIRST_FILE خط ۴۴۷:${NC}"
        echo -e "${YELLOW}$LINE_CONTENT${NC}"
        
        # تلاش برای رفع خطای "; ;" یا ";;"
        if echo "$LINE_CONTENT" | grep -q ";;"; then
            echo -e "${GREEN}✅ خطای تکراری نقطه ویرگول پیدا شد. در حال اصلاح...${NC}"
            sed -i '447s/;;/;/g' "$FIRST_FILE"
            echo -e "${GREEN}✅ خط اصلاح شد.${NC}"
        else
            echo -e "${YELLOW}⚠️ خطا پیچیده‌تر است. لطفاً خط ۴۴۷ فایل $FIRST_FILE را دستی باز کنید و ; اضافی را حذف کنید.${NC}"
        fi
    fi
else
    echo -e "${GREEN}✅ خطای خاص در خط ۴۴۷ یافت نشد.${NC}"
fi

# 4.2 رفع خطای dispatchEvent (خط ۴۳۸)
echo -e "${YELLOW}📝 بررسی خطای dispatchEvent در خط ۴۳۸...${NC}"
JS_FILE_LINE_438=$(find public public/js public/assets resources/views -name "*.js" -o -name "*.blade.php" 2>/dev/null | xargs awk 'NR==438{print FILENAME":"NR":"$0}' 2>/dev/null)

if [ -n "$JS_FILE_LINE_438" ]; then
    FIRST_FILE_438=$(echo "$JS_FILE_LINE_438" | head -1 | cut -d':' -f1)
    LINE_CONTENT_438=$(echo "$JS_FILE_LINE_438" | head -1 | cut -d':' -f3-)
    
    if [ -n "$FIRST_FILE_438" ] && [ -f "$FIRST_FILE_438" ]; then
        echo -e "${RED}❌ خطای dispatchEvent در فایل $FIRST_FILE_438 خط ۴۳۸:${NC}"
        echo -e "${YELLOW}$LINE_CONTENT_438${NC}"
        
        # ایمن‌سازی: اگر کد به صورت onclick="..." است، بهتر است در JS هندل شود
        # اما اگر Inline است، یک شرط ساده اضافه می‌کنیم
        if echo "$LINE_CONTENT_438" | grep -q "dispatchEvent"; then
            # تلاش برای جایگزینی با یک کد ایمن‌تر
            # این کار ریسک دارد، پس فقط اگر مطمئن بودیم انجام می‌دهیم
            # بهتر است کاربر دستی چک کند
            echo -e "${YELLOW}⚠️ خط ۴۳۸ شامل dispatchEvent است. برای رفع خطای null، کد را به شکل زیر تغییر دهید:${NC}"
            echo -e "${GREEN}if (element) { element.dispatchEvent(new Event('click')); }${NC}"
            echo -e "${YELLOW}لطفاً فایل $FIRST_FILE_438 را باز کنید و خط ۴۳۸ را مطابق این الگو اصلاح کنید.${NC}"
        fi
    fi
else
    echo -e "${GREEN}✅ خطای خاص در خط ۴۳۸ یافت نشد.${NC}"
fi

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

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