<?php
// test-unique-visits.php
// Script para testar se o sistema de visitas únicas está funcionando

require_once 'includes/config.php';
require_once 'includes/db.php';
require_once 'includes/functions.php';
require_once 'includes/unique-visits-tracker.php';

// Só executa se parâmetro de teste estiver presente
if (!isset($_GET['test_unique_visits']) || $_GET['test_unique_visits'] !== '1') {
    die('Para executar o teste, adicione ?test_unique_visits=1 à URL');
}

echo "<h1>Teste do Sistema de Visitas Únicas</h1>";
echo "<style>
    body { font-family: Arial, sans-serif; margin: 20px; }
    .success { color: green; }
    .error { color: red; }
    .info { color: blue; }
    .debug { background: #f0f0f0; padding: 10px; margin: 10px 0; }
    table { border-collapse: collapse; width: 100%; margin: 10px 0; }
    th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
    th { background-color: #f2f2f2; }
</style>";

// Gera hash do visitante atual
$visitorHash = hash('sha256', ($_SERVER['REMOTE_ADDR'] ?? '') . '|' . ($_SERVER['HTTP_USER_AGENT'] ?? ''));

echo "<div class='info'>🧪 <strong>Iniciando Testes...</strong></div>";
echo "<div class='debug'>Hash do visitante atual: <code>$visitorHash</code></div>";

// Teste 1: Verificar se as tabelas existem
echo "<h2>1. Verificando Estrutura das Tabelas</h2>";

$tables = ['pages_visitor', 'visitor_sessions', 'visitor_conversions', 'visitor_stats'];
$allTablesExist = true;

foreach ($tables as $table) {
    try {
        $db->query("SHOW TABLES LIKE '$table'");
        $result = $db->single();
        if ($result) {
            echo "<div class='success'>✅ Tabela <strong>$table</strong> existe</div>";
        } else {
            echo "<div class='error'>❌ Tabela <strong>$table</strong> NÃO existe</div>";
            $allTablesExist = false;
        }
    } catch (Exception $e) {
        echo "<div class='error'>❌ Erro ao verificar tabela $table: " . $e->getMessage() . "</div>";
        $allTablesExist = false;
    }
}

if (!$allTablesExist) {
    die("<div class='error'><strong>❌ Erro:</strong> Nem todas as tabelas necessárias existem. Execute o script SQL de criação das tabelas primeiro.</div>");
}

// Teste 2: Verificar visitantes existentes para este hash
echo "<h2>2. Verificando Visitas Existentes</h2>";

try {
    $db->query("
        SELECT vs.*, pv.page_title, pv.page_url
        FROM visitor_sessions vs
        JOIN pages_visitor pv ON vs.pages_visitor_id = pv.id
        WHERE vs.visitor_hash = :hash
        ORDER BY vs.created_at DESC
        LIMIT 10
    ");
    $db->bind(':hash', $visitorHash);
    $existingSessions = $db->resultSet();
    
    if (empty($existingSessions)) {
        echo "<div class='info'>ℹ️ Nenhuma visita anterior encontrada para este visitante</div>";
    } else {
        echo "<div class='info'>📊 Encontradas " . count($existingSessions) . " visitas anteriores:</div>";
        echo "<table>";
        echo "<tr><th>ID</th><th>Página</th><th>URL</th><th>Data Criação</th><th>Última Visita</th><th>Contagem</th></tr>";
        foreach ($existingSessions as $session) {
            echo "<tr>";
            echo "<td>{$session['id']}</td>";
            echo "<td>{$session['page_title']}</td>";
            echo "<td>{$session['page_url']}</td>";
            echo "<td>{$session['created_at']}</td>";
            echo "<td>{$session['last_visit_at']}</td>";
            echo "<td>{$session['visit_count']}</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
} catch (Exception $e) {
    echo "<div class='error'>❌ Erro ao verificar visitas existentes: " . $e->getMessage() . "</div>";
}

// Teste 3: Simular visita para página de teste
echo "<h2>3. Testando Registro de Visita Única</h2>";

$testPageUrl = '/test-page-' . time();
$testPageTitle = 'Página de Teste - ' . date('H:i:s');

echo "<div class='info'>🔄 Tentando registrar visita para: <strong>$testPageTitle</strong> ($testPageUrl)</div>";

try {
    $result = $uniqueVisitsTracker->trackUniqueVisit(null, $testPageUrl, $testPageTitle);
    
    if ($result) {
        echo "<div class='success'>✅ Visita única registrada com sucesso!</div>";
    } else {
        echo "<div class='error'>❌ Visita NÃO foi registrada (pode já existir nas últimas 24h)</div>";
    }
} catch (Exception $e) {
    echo "<div class='error'>❌ Erro ao registrar visita: " . $e->getMessage() . "</div>";
}

// Teste 4: Tentar registrar a mesma visita novamente (deve falhar)
echo "<h2>4. Testando Duplicação de Visita (deve falhar)</h2>";

echo "<div class='info'>🔄 Tentando registrar a mesma visita novamente...</div>";

try {
    $result = $uniqueVisitsTracker->trackUniqueVisit(null, $testPageUrl, $testPageTitle);
    
    if ($result) {
        echo "<div class='error'>❌ PROBLEMA: Visita duplicada foi registrada (não deveria!)</div>";
    } else {
        echo "<div class='success'>✅ Correto: Visita duplicada foi rejeitada</div>";
    }
} catch (Exception $e) {
    echo "<div class='error'>❌ Erro no teste de duplicação: " . $e->getMessage() . "</div>";
}

// Teste 5: Verificar se a visita foi realmente registrada
echo "<h2>5. Verificando Registro na Base de Dados</h2>";

try {
    // Busca a página de teste
    $db->query("SELECT * FROM pages_visitor WHERE page_url = :url");
    $db->bind(':url', $testPageUrl);
    $testPage = $db->single();
    
    if ($testPage) {
        echo "<div class='success'>✅ Página de teste criada: ID {$testPage['id']}</div>";
        
        // Busca sessões desta página
        $db->query("
            SELECT COUNT(*) as total_sessions,
                   COUNT(DISTINCT visitor_hash) as unique_visitors,
                   MAX(created_at) as last_visit
            FROM visitor_sessions 
            WHERE pages_visitor_id = :page_id
        ");
        $db->bind(':page_id', $testPage['id']);
        $sessionStats = $db->single();
        
        echo "<div class='debug'>";
        echo "<strong>Estatísticas da página de teste:</strong><br>";
        echo "Total de sessões: {$sessionStats['total_sessions']}<br>";
        echo "Visitantes únicos: {$sessionStats['unique_visitors']}<br>";
        echo "Última visita: {$sessionStats['last_visit']}<br>";
        echo "</div>";
        
        if ($sessionStats['unique_visitors'] == 1 && $sessionStats['total_sessions'] == 1) {
            echo "<div class='success'>✅ Teste PASSOU: Exatamente 1 visitante único registrado</div>";
        } else {
            echo "<div class='error'>❌ Teste FALHOU: Esperado 1 visitante único, encontrado {$sessionStats['unique_visitors']}</div>";
        }
    } else {
        echo "<div class='error'>❌ Página de teste não foi criada</div>";
    }
} catch (Exception $e) {
    echo "<div class='error'>❌ Erro ao verificar registros: " . $e->getMessage() . "</div>";
}

// Teste 6: Verificar constraint única
echo "<h2>6. Verificando Constraints da Tabela</h2>";

try {
    $db->query("SHOW INDEX FROM visitor_sessions WHERE Key_name LIKE '%unique%'");
    $uniqueIndexes = $db->resultSet();
    
    if (!empty($uniqueIndexes)) {
        echo "<div class='success'>✅ Constraints únicas encontradas:</div>";
        echo "<table>";
        echo "<tr><th>Nome do Índice</th><th>Colunas</th><th>Único</th></tr>";
        foreach ($uniqueIndexes as $index) {
            echo "<tr>";
            echo "<td>{$index['Key_name']}</td>";
            echo "<td>{$index['Column_name']}</td>";
            echo "<td>" . ($index['Non_unique'] == 0 ? 'Sim' : 'Não') . "</td>";
            echo "</tr>";
        }
        echo "</table>";
    } else {
        echo "<div class='error'>❌ Nenhuma constraint única encontrada na tabela visitor_sessions</div>";
        echo "<div class='info'>💡 Execute o script de correção da constraint única</div>";
    }
} catch (Exception $e) {
    echo "<div class='error'>❌ Erro ao verificar constraints: " . $e->getMessage() . "</div>";
}

// Teste 7: Teste de performance
echo "<h2>7. Teste de Performance</h2>";

$startTime = microtime(true);

try {
    for ($i = 0; $i < 5; $i++) {
        $uniqueVisitsTracker->trackUniqueVisit(null, "/test-perf-$i", "Teste Performance $i");
    }
    
    $endTime = microtime(true);
    $executionTime = round(($endTime - $startTime) * 1000, 2);
    
    echo "<div class='success'>✅ 5 visitas processadas em {$executionTime}ms</div>";
    
    if ($executionTime > 1000) {
        echo "<div class='error'>⚠️ Performance lenta: >1 segundo</div>";
    } else {
        echo "<div class='success'>✅ Performance adequada</div>";
    }
} catch (Exception $e) {
    echo "<div class='error'>❌ Erro no teste de performance: " . $e->getMessage() . "</div>";
}

// Teste 8: Limpeza dos dados de teste
echo "<h2>8. Limpeza dos Dados de Teste</h2>";

if (isset($_GET['cleanup']) && $_GET['cleanup'] === '1') {
    try {
        // Remove páginas de teste
        $db->query("DELETE FROM pages_visitor WHERE page_url LIKE '/test-%'");
        $db->execute();
        $deletedPages = $db->rowCount();
        
        echo "<div class='success'>✅ $deletedPages páginas de teste removidas</div>";
        
        // Remove sessões órfãs
        $db->query("
            DELETE vs FROM visitor_sessions vs
            LEFT JOIN pages_visitor pv ON vs.pages_visitor_id = pv.id
            WHERE pv.id IS NULL
        ");
        $db->execute();
        $deletedSessions = $db->rowCount();
        
        echo "<div class='success'>✅ $deletedSessions sessões órfãs removidas</div>";
        
    } catch (Exception $e) {
        echo "<div class='error'>❌ Erro na limpeza: " . $e->getMessage() . "</div>";
    }
} else {
    echo "<div class='info'>💡 Para limpar dados de teste, adicione &cleanup=1 à URL</div>";
}

// Resumo final
echo "<h2>📋 Resumo dos Testes</h2>";

echo "<div class='debug'>";
echo "<strong>Status do Sistema:</strong><br>";
echo "• Hash do visitante: <code>$visitorHash</code><br>";
echo "• IP: " . ($_SERVER['REMOTE_ADDR'] ?? 'Não detectado') . "<br>";
echo "• User Agent: " . ($_SERVER['HTTP_USER_AGENT'] ?? 'Não detectado') . "<br>";
echo "• Timestamp: " . date('Y-m-d H:i:s') . "<br>";
echo "</div>";

echo "<div class='info'>";
echo "<strong>🔧 Para debug adicional:</strong><br>";
echo "• Adicione <code>&debug_visits=1</code> à URL das suas páginas<br>";
echo "• Verifique os logs de erro do PHP<br>";
echo "• Execute: <code>SELECT * FROM visitor_duplicates;</code> no MySQL<br>";
echo "</div>";

echo "<div class='success'><strong>✅ Testes concluídos!</strong></div>";
?>