#!/bin/bash

# Script para diagnosticar erros 500 no sistema

LOG_FILE="/var/www/gestorstream/backend/storage/logs/laravel.log"
BACKEND_DIR="/var/www/gestorstream/backend"

echo "========================================="
echo "🔍 DIAGNÓSTICO DE ERROS 500"
echo "========================================="
echo ""

# 1. Verificar últimos erros no log
echo "1. ÚLTIMOS ERROS NO LOG DO LARAVEL:"
echo "----------------------------------------"
if [ -f "$LOG_FILE" ]; then
    tail -n 100 "$LOG_FILE" | grep -A 10 "ERROR\|Exception\|FatalError" | tail -n 50
else
    echo "❌ Arquivo de log não encontrado: $LOG_FILE"
fi
echo ""

# 2. Verificar sintaxe PHP
echo "2. VERIFICANDO SINTAXE PHP:"
echo "----------------------------------------"
cd "$BACKEND_DIR" || exit 1

# Verificar arquivos modificados recentemente
echo "Verificando sintaxe dos controllers principais..."
php -l app/Http/Controllers/Api/PlanController.php 2>&1
php -l app/Http/Controllers/Admin/UpdateController.php 2>&1
php -l app/Http/Controllers/Api/AdminUserController.php 2>&1
php -l app/Http/Controllers/Api/AuthController.php 2>&1
php -l app/Models/User.php 2>&1
echo ""

# 3. Testar conexão com banco
echo "3. TESTANDO CONEXÃO COM BANCO DE DADOS:"
echo "----------------------------------------"
php artisan tinker --execute="echo 'DB Connection: '; try { DB::connection()->getPdo(); echo 'OK\n'; } catch(Exception \$e) { echo 'ERROR: ' . \$e->getMessage() . '\n'; }"
echo ""

# 4. Verificar se há problemas com activeSubscription
echo "4. TESTANDO QUERY activeSubscription:"
echo "----------------------------------------"
php artisan tinker --execute="
try {
    \$user = App\Models\User::first();
    if (\$user) {
        echo 'User ID: ' . \$user->id . PHP_EOL;
        \$sub = \$user->activeSubscription()->first();
        echo 'ActiveSubscription query: OK' . PHP_EOL;
    } else {
        echo 'Nenhum usuário encontrado' . PHP_EOL;
    }
} catch (Exception \$e) {
    echo 'ERRO em activeSubscription: ' . \$e->getMessage() . PHP_EOL;
    echo 'Trace: ' . substr(\$e->getTraceAsString(), 0, 500) . PHP_EOL;
}
"
echo ""

# 5. Testar Plan::all()
echo "5. TESTANDO Plan::all():"
echo "----------------------------------------"
php artisan tinker --execute="
try {
    \$plans = App\Models\Plan::all();
    echo 'Planos encontrados: ' . \$plans->count() . PHP_EOL;
    echo 'Serialização: OK' . PHP_EOL;
} catch (Exception \$e) {
    echo 'ERRO em Plan::all(): ' . \$e->getMessage() . PHP_EOL;
    echo 'Trace: ' . substr(\$e->getTraceAsString(), 0, 500) . PHP_EOL;
}
"
echo ""

# 6. Verificar se há problemas com UpdateService
echo "6. TESTANDO UpdateService:"
echo "----------------------------------------"
php artisan tinker --execute="
try {
    \$service = app(App\Services\UpdateService::class);
    \$version = \$service->getCurrentVersion();
    echo 'Current Version: ' . \$version . PHP_EOL;
    echo 'UpdateService: OK' . PHP_EOL;
} catch (Exception \$e) {
    echo 'ERRO em UpdateService: ' . \$e->getMessage() . PHP_EOL;
    echo 'Trace: ' . substr(\$e->getTraceAsString(), 0, 500) . PHP_EOL;
}
"
echo ""

# 7. Verificar se há problemas com GiteaSettings
echo "7. TESTANDO GiteaSettings:"
echo "----------------------------------------"
php artisan tinker --execute="
try {
    \$settings = App\Models\GiteaSettings::getActive();
    if (\$settings) {
        echo 'GiteaSettings encontrado: ID ' . \$settings->id . PHP_EOL;
    } else {
        echo 'GiteaSettings: null (OK)' . PHP_EOL;
    }
} catch (Exception \$e) {
    echo 'ERRO em GiteaSettings: ' . \$e->getMessage() . PHP_EOL;
    echo 'Trace: ' . substr(\$e->getTraceAsString(), 0, 500) . PHP_EOL;
}
"
echo ""

# 8. Verificar cache e config
echo "8. LIMPANDO CACHE:"
echo "----------------------------------------"
php artisan cache:clear 2>&1
php artisan config:clear 2>&1
php artisan route:clear 2>&1
php artisan view:clear 2>&1
echo "✅ Cache limpo"
echo ""

# 9. Verificar permissões
echo "9. VERIFICANDO PERMISSÕES:"
echo "----------------------------------------"
ls -la storage/logs/ | head -5
echo ""

echo "========================================="
echo "✅ DIAGNÓSTICO CONCLUÍDO"
echo "========================================="
echo ""
echo "Verifique os erros acima e corrija conforme necessário."

