#!/bin/bash
# diagnosticar-erro-download-backup.sh
# Script para diagnosticar erro 500 no download de backup

echo "🔍 Diagnosticando erro 500 no download de backup..."
echo ""

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

if [ ! -d "$BACKEND_DIR" ]; then
    echo "❌ Erro: Diretório $BACKEND_DIR não encontrado"
    exit 1
fi

cd "$BACKEND_DIR" || exit 1

echo "📋 1. Últimas 50 linhas do log do Laravel (relacionadas a backup):"
echo "=========================================="
tail -100 "$LOG_FILE" | grep -i "backup\|download\|storage" | tail -50
echo ""

echo "📋 2. Últimos erros do Laravel:"
echo "=========================================="
tail -100 "$LOG_FILE" | grep -i "error\|exception\|failed" | tail -30
echo ""

echo "📋 3. Verificando backup local:"
echo "=========================================="
BACKUP_FILE="backup_mysql_2026-01-14_15-30-21.sql"
BACKUP_PATH="$BACKEND_DIR/storage/app/private/backups/$BACKUP_FILE"

if [ -f "$BACKUP_PATH" ]; then
    echo "✅ Arquivo encontrado: $BACKUP_PATH"
    ls -lh "$BACKUP_PATH"
    echo ""
    echo "Permissões:"
    stat "$BACKUP_PATH" | grep -E "Access:|Uid:|Gid:"
else
    echo "❌ Arquivo NÃO encontrado: $BACKUP_PATH"
    echo ""
    echo "Arquivos disponíveis em storage/app/private/backups/:"
    ls -lh "$BACKEND_DIR/storage/app/private/backups/" 2>/dev/null | head -10 || echo "Diretório não existe ou está vazio"
fi
echo ""

echo "📋 4. Verificando configuração de storage:"
echo "=========================================="
php artisan tinker --execute="
try {
    \$storage = \App\Models\StorageIntegration::getActive();
    if (\$storage) {
        echo 'Storage ativo: ' . \$storage->name . PHP_EOL;
        echo 'Bucket: ' . \$storage->bucket . PHP_EOL;
        echo 'Provider: ' . \$storage->provider . PHP_EOL;
    } else {
        echo '⚠️  Nenhum storage ativo configurado' . PHP_EOL;
    }
} catch (\Exception \$e) {
    echo '❌ Erro ao verificar storage: ' . \$e->getMessage() . PHP_EOL;
}
"
echo ""

echo "📋 5. Testando endpoint diretamente (local):"
echo "=========================================="
curl -s -o /dev/null -w "Status: %{http_code}\n" \
  -H "Authorization: Bearer TEST_TOKEN" \
  "http://localhost/api/v1/admin/database/backup/download?backup_file=$BACKUP_FILE&backup_type=local" \
  2>&1 | head -5
echo ""

echo "📋 6. Verificando permissões do diretório de backups:"
echo "=========================================="
BACKUP_DIR="$BACKEND_DIR/storage/app/private/backups"
if [ -d "$BACKUP_DIR" ]; then
    ls -ld "$BACKUP_DIR"
    echo ""
    echo "Arquivos no diretório:"
    ls -lh "$BACKUP_DIR" | head -10
else
    echo "❌ Diretório não existe: $BACKUP_DIR"
fi
echo ""

echo "📋 7. Verificando usuário do PHP-FPM:"
echo "=========================================="
ps aux | grep php-fpm | grep -v grep | head -3
echo ""

echo "=========================================="
echo "✅ DIAGNÓSTICO CONCLUÍDO"
echo "=========================================="
echo ""
echo "📝 Próximos passos:"
echo "   1. Revise os logs acima"
echo "   2. Verifique se o arquivo de backup existe"
echo "   3. Verifique se as permissões estão corretas"
echo "   4. Se o erro persistir, compartilhe os logs acima"
echo ""
