#!/bin/bash

echo "=========================================="
echo "DEPLOY: Correções Completas"
echo "=========================================="
echo ""

GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

cd /var/www/gestorstream

echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE}  1. Atualizando Código do Repositório${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
git stash 2>/dev/null
git pull origin main

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✓${NC} Código atualizado"
else
    echo -e "${RED}❌${NC} Erro ao atualizar código"
    exit 1
fi
echo ""

echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE}  2. Limpando Cache do Backend${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
cd backend
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
echo -e "${GREEN}✓${NC} Cache limpo"
echo ""

echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE}  3. Verificando Estrutura do Banco${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo "Verificando coluna 'meta' na tabela subscriptions..."
HAS_META=$(php artisan tinker --execute="echo Schema::hasColumn('subscriptions', 'meta') ? 'yes' : 'no';" 2>/dev/null | grep -o 'yes\|no' | head -1)

if [ "$HAS_META" = "yes" ]; then
    echo -e "${GREEN}✓${NC} Coluna 'meta' existe (ideal)"
else
    echo -e "${YELLOW}⚠${NC}  Coluna 'meta' NÃO existe - usando 'admin_notes' como fallback"
fi
echo ""

echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE}  4. Testando Endpoint de Proration${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo "Testando cálculo de proration..."

# Pegar primeiro usuário e criar token de teste
TEST_RESULT=$(php artisan tinker --execute="
\$user = \App\Models\User::first();
if (\$user) {
    \$token = \$user->createToken('test-deploy')->plainTextToken;
    echo 'TOKEN=' . \$token;
} else {
    echo 'NO_USER';
}
" 2>/dev/null | grep 'TOKEN=' | cut -d'=' -f2)

if [ ! -z "$TEST_RESULT" ] && [ "$TEST_RESULT" != "NO_USER" ]; then
    # Pegar primeiro plano disponível
    PLAN_ID=$(php artisan tinker --execute="
    \$plan = \App\Models\Plan::where('is_active', true)->first();
    if (\$plan) {
        echo \$plan->id;
    } else {
        echo '0';
    }
    " 2>/dev/null | grep -o '[0-9]\+' | head -1)
    
    if [ "$PLAN_ID" != "0" ] && [ ! -z "$PLAN_ID" ]; then
        echo "Testando com plan_id=$PLAN_ID..."
        PRORATION_TEST=$(curl -s -X POST "https://gestor.jf.eng.br/api/v1/subscriptions/calculate-proration" \
            -H "Authorization: Bearer $TEST_RESULT" \
            -H "Content-Type: application/json" \
            -H "Accept: application/json" \
            -d "{\"plan_id\": $PLAN_ID}" 2>/dev/null)
        
        if echo "$PRORATION_TEST" | grep -q "type"; then
            echo -e "${GREEN}✓${NC} Endpoint de proration funciona"
            echo "   Resultado: $(echo $PRORATION_TEST | jq -r '.type // "unknown"' 2>/dev/null || echo 'sem jq instalado')"
        else
            echo -e "${YELLOW}⚠${NC}  Endpoint retornou resposta inesperada"
            echo "   Debug: $PRORATION_TEST"
        fi
    else
        echo -e "${YELLOW}⚠${NC}  Nenhum plano ativo encontrado para teste"
    fi
    
    # Limpar token de teste
    php artisan tinker --execute="\App\Models\PersonalAccessToken::where('name', 'test-deploy')->delete();" > /dev/null 2>&1
else
    echo -e "${YELLOW}⚠${NC}  Nenhum usuário encontrado para teste"
fi
echo ""

echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE}  5. Recompilando Frontend${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
cd ../frontend

# Verificar se node_modules existe
if [ ! -d "node_modules" ]; then
    echo "Instalando dependências..."
    npm install
fi

echo "Compilando frontend..."
npm run build

if [ $? -eq 0 ]; then
    echo -e "${GREEN}✓${NC} Frontend compilado com sucesso"
    
    # Verificar se gerou arquivos
    if [ -f "dist/index.html" ]; then
        echo -e "${GREEN}✓${NC} Arquivos gerados em dist/"
        ls -lh dist/index.html
    else
        echo -e "${RED}❌${NC} Erro: dist/index.html não foi gerado"
    fi
else
    echo -e "${RED}❌${NC} Erro ao compilar frontend"
    exit 1
fi
echo ""

echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE}  6. Recarregando Nginx${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
sudo nginx -t
if [ $? -eq 0 ]; then
    sudo nginx -s reload
    echo -e "${GREEN}✓${NC} Nginx recarregado"
else
    echo -e "${RED}❌${NC} Erro na configuração do Nginx"
fi
echo ""

echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE}  7. Verificando Permissões${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
cd /var/www/gestorstream
sudo chown -R www-data:www-data backend/storage
sudo chmod -R 775 backend/storage
echo -e "${GREEN}✓${NC} Permissões ajustadas"
echo ""

echo ""
echo -e "${GREEN}=========================================="
echo -e "✅  DEPLOY COMPLETO!"
echo -e "==========================================${NC}"
echo ""
echo -e "${YELLOW}📋 RESUMO DAS CORREÇÕES:${NC}"
echo "  ✓ ProrationService usa 'admin_notes' (não 'meta')"
echo "  ✓ CheckoutModal calcula proration antes de gerar PIX"
echo "  ✓ Valor correto é mostrado ao usuário"
echo "  ✓ Alerta de vencimento próximo adicionado"
echo "  ✓ Botão 'Renovar Assinatura' funcional"
echo "  ✓ Histórico de pagamentos com logs de debug"
echo ""
echo -e "${YELLOW}🧪 PRÓXIMOS PASSOS:${NC}"
echo "  1. Acesse /subscription no navegador"
echo "  2. Abra DevTools (F12) > Console"
echo "  3. Tente fazer upgrade/downgrade"
echo "  4. Verifique se o valor calculado está correto"
echo "  5. Veja os logs do console:"
echo "     [Checkout] Calculating proration..."
echo "     [Checkout] Proration result: {...}"
echo "     [PaymentHistory] Payments count: X"
echo ""
echo -e "${YELLOW}📝 SE O HISTÓRICO NÃO APARECER:${NC}"
echo "  Envie os logs do console (F12)"
echo ""
echo -e "${YELLOW}📝 SE O CÁLCULO ESTIVER ERRADO:${NC}"
echo "  Envie:"
echo "  - Plano atual e preço"
echo "  - Novo plano e preço"
echo "  - Dias restantes"
echo "  - Valor calculado pelo sistema"
echo "  - Valor esperado por você"
echo ""
