#!/bin/bash
# Script de Diagnóstico do Sistema de Atualização via Gitea

echo "=========================================="
echo "  DIAGNÓSTICO GITEA AUTO-UPDATE"
echo "=========================================="
echo ""
echo "Data/Hora: $(date)"
echo ""

APP_DIR="/var/www/gestorstream"
LOG_FILE="/tmp/diagnostico-gitea-$(date +%Y%m%d-%H%M%S).log"

{
    echo "=========================================="
    echo "PASSO 1: Verificar configuração do Gitea no banco"
    echo "=========================================="
    cd "$APP_DIR/backend"
    php artisan tinker --execute="
        \$settings = \App\Models\GiteaSettings::getActive();
        if (\$settings) {
            echo 'URL: ' . \$settings->gitea_url . PHP_EOL;
            echo 'Repositório: ' . \$settings->repository . PHP_EOL;
            echo 'Token configurado: ' . (\$settings->access_token ? 'SIM' : 'NÃO') . PHP_EOL;
            echo 'Webhook Secret configurado: ' . (\$settings->webhook_secret ? 'SIM' : 'NÃO') . PHP_EOL;
            echo 'Auto-Update habilitado: ' . (\$settings->auto_update_enabled ? 'SIM' : 'NÃO') . PHP_EOL;
            echo 'Branch: ' . \$settings->branch . PHP_EOL;
        } else {
            echo 'Nenhuma configuração do Gitea encontrada!' . PHP_EOL;
        }
    " 2>&1
    echo ""
    
    echo "=========================================="
    echo "PASSO 2: Testar endpoint do webhook"
    echo "=========================================="
    curl -s http://localhost/api/v1/webhook/gitea 2>&1 | head -10
    echo ""
    
    echo "=========================================="
    echo "PASSO 3: Verificar logs de webhook (últimas 20 linhas)"
    echo "=========================================="
    grep -i "webhook\|gitea" "$APP_DIR/backend/storage/logs/laravel.log" | tail -20
    echo ""
    
    echo "=========================================="
    echo "PASSO 4: Verificar se queue worker está rodando"
    echo "=========================================="
    ps aux | grep -E "queue:work|artisan.*queue" | grep -v grep
    echo ""
    
    echo "=========================================="
    echo "PASSO 5: Verificar jobs na fila"
    echo "=========================================="
    cd "$APP_DIR/backend"
    php artisan tinker --execute="
        \$pending = \DB::table('jobs')->count();
        \$failed = \DB::table('failed_jobs')->count();
        echo 'Jobs pendentes: ' . \$pending . PHP_EOL;
        echo 'Jobs falhados: ' . \$failed . PHP_EOL;
    " 2>&1
    echo ""
    
    echo "=========================================="
    echo "PASSO 6: Verificar atualizações do sistema"
    echo "=========================================="
    cd "$APP_DIR/backend"
    php artisan tinker --execute="
        \$updates = \App\Models\SystemUpdate::orderBy('created_at', 'desc')->limit(5)->get(['id', 'version', 'status', 'created_at']);
        foreach (\$updates as \$update) {
            echo 'ID: ' . \$update->id . ' | Versão: ' . \$update->version . ' | Status: ' . \$update->status . ' | Data: ' . \$update->created_at . PHP_EOL;
        }
    " 2>&1
    echo ""
    
    echo "=========================================="
    echo "PASSO 7: Verificar permissões do script de build"
    echo "=========================================="
    ls -la "$APP_DIR/build_frontend.sh" 2>/dev/null || echo "Script não encontrado"
    echo ""
    
    echo "=========================================="
    echo "PASSO 8: Verificar sudoers para www-data"
    echo "=========================================="
    sudo cat /etc/sudoers.d/gestorstream 2>/dev/null || echo "Arquivo sudoers não encontrado"
    echo ""
    
    echo "=========================================="
    echo "PASSO 9: Testar conexão com Gitea"
    echo "=========================================="
    cd "$APP_DIR/backend"
    php artisan tinker --execute="
        \$service = app(\App\Services\GiteaService::class);
        if (\$service->isConfigured()) {
            echo 'Gitea está configurado' . PHP_EOL;
            try {
                \$releases = \$service->getReleases();
                echo 'Releases encontradas: ' . count(\$releases) . PHP_EOL;
                if (count(\$releases) > 0) {
                    echo 'Última release: ' . \$releases[0]['tag_name'] . PHP_EOL;
                }
            } catch (\Exception \$e) {
                echo 'Erro ao buscar releases: ' . \$e->getMessage() . PHP_EOL;
            }
        } else {
            echo 'Gitea NÃO está configurado!' . PHP_EOL;
        }
    " 2>&1
    echo ""
    
    echo "=========================================="
    echo "PASSO 10: Verificar rota do webhook"
    echo "=========================================="
    cd "$APP_DIR/backend"
    php artisan route:list | grep -i webhook
    echo ""
    
    echo "=========================================="
    echo "PASSO 11: Verificar logs de erro recentes"
    echo "=========================================="
    grep -i "error\|exception\|failed" "$APP_DIR/backend/storage/logs/laravel.log" | grep -i "update\|gitea\|webhook" | tail -10
    echo ""
    
    echo "=========================================="
    echo "PASSO 12: Verificar se há modo de manutenção"
    echo "=========================================="
    if [ -f "$APP_DIR/backend/storage/framework/down" ]; then
        echo "⚠️  Modo de manutenção ATIVO!"
        cat "$APP_DIR/backend/storage/framework/down"
    else
        echo "✅ Modo de manutenção não está ativo"
    fi
    echo ""
    
} | tee "$LOG_FILE"

echo ""
echo "=========================================="
echo "✅ Diagnóstico completo!"
echo "=========================================="
echo ""
echo "📄 Log salvo em: $LOG_FILE"
echo ""
echo "📋 Copie o conteúdo acima e envie para análise."

