#!/bin/bash

echo "=========================================="
echo "CORREÇÃO: WEBHOOK HMAC - ERRO 401"
echo "=========================================="
echo ""

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

# Verificar diretório
if [ ! -d "backend" ]; then
    echo -e "${RED}❌ ERRO: Execute na raiz do projeto${NC}"
    exit 1
fi

echo -e "${GREEN}✓${NC} Diretório correto: $(pwd)"
echo ""

# 1. Backup
echo "1. Fazendo backup..."
BACKUP_FILE="backend/app/Http/Controllers/Api/WebhookController.php.backup.hmac.$(date +%Y%m%d_%H%M%S)"
if [ -f "backend/app/Http/Controllers/Api/WebhookController.php" ]; then
    cp backend/app/Http/Controllers/Api/WebhookController.php "$BACKUP_FILE"
    echo -e "${GREEN}✓${NC} Backup: $BACKUP_FILE"
else
    echo -e "${YELLOW}⚠${NC} Arquivo original não encontrado"
fi
echo ""

# 2. Atualizar código
echo "2. Atualizando código..."
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 no git pull"
fi
echo ""

# 3. Limpar cache
echo "3. Limpando cache..."
cd backend
php artisan config:clear > /dev/null 2>&1
php artisan cache:clear > /dev/null 2>&1
php artisan route:clear > /dev/null 2>&1
echo -e "${GREEN}✓${NC} Cache limpo"
cd ..
echo ""

# 4. Verificar secret configurado
echo "4. Verificando configuração..."
SECRET=$(cd backend && grep OPENPIX_WEBHOOK_SECRET .env 2>/dev/null | cut -d'=' -f2)
if [ -n "$SECRET" ]; then
    echo -e "${GREEN}✓${NC} OPENPIX_WEBHOOK_SECRET configurado"
    echo "   Valor: ${SECRET:0:20}..."
else
    echo -e "${YELLOW}⚠${NC} OPENPIX_WEBHOOK_SECRET não encontrado no .env"
    echo ""
    echo "Deseja configurar agora? (s/n)"
    read -r CONFIGURE
    if [ "$CONFIGURE" = "s" ] || [ "$CONFIGURE" = "S" ]; then
        echo ""
        echo "Cole o valor do Webhook Secret do painel OpenPIX:"
        read -r SECRET_VALUE
        echo "OPENPIX_WEBHOOK_SECRET=${SECRET_VALUE}" >> backend/.env
        echo -e "${GREEN}✓${NC} Secret configurado"
        cd backend
        php artisan config:clear > /dev/null 2>&1
        cd ..
    fi
fi
echo ""

# 5. Teste sem HMAC
echo "5. Testando webhook SEM HMAC..."
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST https://gestor.jf.eng.br/api/webhooks/openpix \
  -H "Content-Type: application/json" \
  -d '{"event":"OPENPIX:CHARGE_COMPLETED","charge":{"correlationID":"test_no_hmac","transactionID":"test456","status":"COMPLETED"}}')

HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
BODY=$(echo "$RESPONSE" | head -n-1)

if [ "$HTTP_CODE" = "200" ]; then
    echo -e "${GREEN}✓${NC} Webhook sem HMAC: Status 200 OK"
    echo "   Response: $BODY"
else
    echo -e "${RED}❌${NC} Webhook sem HMAC: Status $HTTP_CODE"
    echo "   Response: $BODY"
    echo ""
    echo "O webhook deve funcionar sem HMAC antes de testar com HMAC."
    exit 1
fi
echo ""

# 6. Teste com HMAC
echo "6. Testando webhook COM HMAC..."
echo "=========================================="
echo ""

if [ -f "test_hmac_validation.php" ]; then
    php test_hmac_validation.php
    TEST_EXIT=$?
    
    echo ""
    echo "=========================================="
    
    if [ $TEST_EXIT -eq 0 ]; then
        echo -e "${GREEN}✅ SUCESSO! HMAC FUNCIONANDO!${NC}"
        echo ""
        echo "Configure no painel do OpenPIX:"
        echo "- URL: https://gestor.jf.eng.br/api/webhooks/openpix"
        echo "- Webhook Secret: openpix_EtpEIRxeT+5yt4MM4E8Ern3/WVoLzuRDtlJx15jHrFc="
        echo "- Evento: OPENPIX:CHARGE_COMPLETED"
        echo ""
        echo "O OpenPIX gerará automaticamente o header X-OpenPix-Signature"
    else
        echo -e "${YELLOW}⚠ HMAC ainda com problemas${NC}"
        echo ""
        echo "Próximos passos:"
        echo "1. Verifique os logs:"
        echo "   tail -100 backend/storage/logs/laravel.log | grep -A 10 HMAC"
        echo ""
        echo "2. Verifique se o secret está correto:"
        echo "   cat backend/.env | grep OPENPIX_WEBHOOK_SECRET"
        echo ""
        echo "3. Teste manualmente:"
        echo "   php test_hmac_validation.php"
    fi
else
    echo -e "${YELLOW}⚠${NC} Arquivo test_hmac_validation.php não encontrado"
    echo ""
    echo "Por favor, faça upload do arquivo test_hmac_validation.php"
fi

echo ""
echo "=========================================="
echo "VERIFICAÇÃO DOS LOGS"
echo "=========================================="
echo ""

if [ -f "backend/storage/logs/laravel.log" ]; then
    echo "Últimas 15 linhas relacionadas ao webhook:"
    echo "------------------------------------------"
    grep -i 'webhook\|openpix\|hmac' backend/storage/logs/laravel.log | tail -15
    echo "------------------------------------------"
else
    echo -e "${YELLOW}⚠${NC} Log não encontrado"
fi

echo ""
echo "=========================================="
echo "CORREÇÃO APLICADA"
echo "=========================================="
echo ""
echo "Para monitorar webhooks em tempo real:"
echo "  tail -f backend/storage/logs/laravel.log | grep --line-buffered -i webhook"
echo ""

exit 0
