<?php
// scripts/test-email.php

// Define BASE_PATH
define('BASE_PATH', dirname(dirname(__FILE__)));

// Includes necessários
require_once BASE_PATH . '/includes/config.php';
require_once BASE_PATH . '/includes/db.php';
require_once BASE_PATH . '/includes/functions.php';
require_once BASE_PATH . '/includes/email-config.php';

// Autoloader do Composer
if (file_exists(BASE_PATH . '/vendor/autoload.php')) {
    require_once BASE_PATH . '/vendor/autoload.php';
} else {
    die("❌ Composer não encontrado. Execute: composer install\n");
}

require_once BASE_PATH . '/includes/email-sender.php';

echo "🧪 TESTE DO SISTEMA DE EMAIL\n";
echo "=============================\n\n";

// Verificar configurações
echo "📋 Verificando configurações...\n";
echo "SMTP Host: " . SMTP_HOST . "\n";
echo "SMTP Port: " . SMTP_PORT . "\n";
echo "SMTP User: " . SMTP_USERNAME . "\n";
echo "SMTP Encryption: " . SMTP_ENCRYPTION . "\n\n";

// Verificar senha
if (SMTP_PASSWORD === 'SUA_SENHA_AQUI') {
    echo "❌ ERRO: Configure a senha SMTP em email-config.php\n";
    echo "   Edite SMTP_PASSWORD e insira a senha real do email.\n\n";
    exit(1);
}

try {
    // Criar instância do EmailSender
    echo "🔧 Inicializando EmailSender...\n";
    $emailSender = new EmailSender();
    
    // Testar configuração
    echo "🔍 Testando configuração SMTP...\n";
    $configTest = $emailSender->testConfiguration();
    
    if ($configTest['success']) {
        echo "✅ Configuração SMTP válida!\n\n";
    } else {
        echo "❌ Erro na configuração: " . $configTest['message'] . "\n\n";
        exit(1);
    }
    
    // Solicitar email de teste
    if (php_sapi_name() === 'cli') {
        echo "📧 Digite o email para teste: ";
        $testEmail = trim(fgets(STDIN));
    } else {
        // Se executado via web, usar email padrão
        $testEmail = 'admin@lebeh.com.br';
    }
    
    if (empty($testEmail) || !filter_var($testEmail, FILTER_VALIDATE_EMAIL)) {
        echo "❌ Email inválido.\n";
        exit(1);
    }
    
    echo "\n🚀 Enviando email de teste para: $testEmail\n";
    
    // Enviar email de teste
    $result = $emailSender->sendTestEmail(
        $testEmail,
        '✅ Teste do Sistema de Email - ' . SITE_NAME,
        'Parabéns! O sistema de email está funcionando corretamente. Este é um email de teste enviado em ' . date('d/m/Y H:i:s') . '.'
    );
    
    if ($result) {
        echo "✅ Email de teste enviado com sucesso!\n";
        echo "   Verifique a caixa de entrada de $testEmail\n\n";
        
        // Testar email de boas-vindas
        echo "🎉 Testando email de boas-vindas...\n";
        $welcomeResult = $emailSender->sendWelcomeEmail(
            $testEmail,
            'Usuário Teste',
            'test-token-' . time()
        );
        
        if ($welcomeResult) {
            echo "✅ Email de boas-vindas enviado com sucesso!\n\n";
        } else {
            echo "❌ Falha no envio do email de boas-vindas.\n\n";
        }
        
    } else {
        echo "❌ Falha no envio do email de teste.\n\n";
        exit(1);
    }
    
    echo "🎯 RESULTADO DO TESTE\n";
    echo "====================\n";
    echo "✅ Configuração SMTP: OK\n";
    echo "✅ Envio de email: OK\n";
    echo "✅ Sistema funcionando corretamente!\n\n";
    echo "💡 Próximos passos:\n";
    echo "   1. Teste o formulário de inscrição no site\n";
    echo "   2. Verifique os logs de email em: " . EMAIL_LOG_FILE . "\n";
    echo "   3. Configure campanhas de email no painel admin\n\n";
    
} catch (Exception $e) {
    echo "❌ ERRO CRÍTICO: " . $e->getMessage() . "\n\n";
    echo "🔧 Soluções possíveis:\n";
    echo "   1. Verificar se a senha SMTP está correta\n";
    echo "   2. Verificar se o servidor permite conexões SMTP\n";
    echo "   3. Tentar usar porta alternativa (587 ou 25)\n";
    echo "   4. Verificar firewall e configurações de rede\n";
    echo "   5. Contatar o provedor de hospedagem\n\n";
    
    logError("Erro no teste de email: " . $e->getMessage());
    exit(1);
}

// Função para testar rate limiting
function testRateLimit() {
    echo "🚦 Testando rate limiting...\n";
    
    try {
        $rateLimiter = new EmailRateLimiter();
        $testEmail = 'test@example.com';
        
        // Testar se pode enviar
        if ($rateLimiter->canSend($testEmail)) {
            echo "✅ Rate limiting funcionando - email permitido\n";
            
            // Simular envio
            $rateLimiter->recordSent($testEmail);
            echo "✅ Envio registrado no rate limiting\n";
        } else {
            echo "⚠️  Rate limit atingido para email de teste\n";
        }
        
    } catch (Exception $e) {
        echo "❌ Erro no teste de rate limiting: " . $e->getMessage() . "\n";
    }
}

// Executar teste de rate limiting se disponível
if (class_exists('EmailRateLimiter')) {
    testRateLimit();
}