<?php
/**
 * Script de teste para API de notificações
 * URL: sistemas.pinheiroempresas.com.br/controlefrota/backend-php/teste-notificacoes.php
 */

require_once __DIR__ . '/config/bootstrap.php';

use ControleFrotas\Config\Database;
use ControleFrotas\Utils\Response;
use ControleFrotas\Utils\Logger;

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');

echo "<h1>🧪 Teste da API de Notificações</h1>";

try {
    // 1. Verificar se a tabela existe
    echo "<h2>1. Verificando tabela notificacoes_push</h2>";
    $resultado = Database::query("SHOW TABLES LIKE 'notificacoes_push'");
    if (empty($resultado)) {
        echo "❌ Tabela notificacoes_push não existe!";
        exit;
    }
    echo "✅ Tabela notificacoes_push existe<br>";

    // 2. Verificar estrutura da tabela
    echo "<h2>2. Estrutura da tabela</h2>";
    $estrutura = Database::query("DESCRIBE notificacoes_push");
    echo "<pre>";
    foreach ($estrutura as $coluna) {
        echo "{$coluna['Field']} - {$coluna['Type']} - {$coluna['Null']}<br>";
    }
    echo "</pre>";

    // 3. Verificar notificações existentes
    echo "<h2>3. Notificações existentes</h2>";
    $notificacoes = Database::query("SELECT * FROM notificacoes_push ORDER BY created_at DESC LIMIT 5");
    echo "Total de notificações: " . count($notificacoes) . "<br>";
    
    if (!empty($notificacoes)) {
        echo "<table border='1'>";
        echo "<tr><th>ID</th><th>User ID</th><th>Tipo</th><th>Título</th><th>Lida</th><th>Data</th></tr>";
        foreach ($notificacoes as $notif) {
            echo "<tr>";
            echo "<td>{$notif['id']}</td>";
            echo "<td>{$notif['user_id']}</td>";
            echo "<td>{$notif['tipo']}</td>";
            echo "<td>{$notif['titulo']}</td>";
            echo "<td>" . ($notif['lida'] ? 'Sim' : 'Não') . "</td>";
            echo "<td>{$notif['created_at']}</td>";
            echo "</tr>";
        }
        echo "</table>";
    }

    // 4. Testar busca de notificações não lidas para gestor ID 2
    echo "<h2>4. Testando busca de notificações não lidas para gestor ID 2</h2>";
    $sql = "SELECT 
                n.*,
                s.cliente as solicitacao_cliente,
                s.prioridade as solicitacao_prioridade,
                s.tecnico_id as solicitacao_tecnico_id,
                u.nome as tecnico_nome
            FROM notificacoes_push n
            LEFT JOIN solicitacoes_viagem s ON n.solicitacao_id = s.id
            LEFT JOIN usuarios u ON s.tecnico_id = u.id
            WHERE n.user_id = '2' AND n.lida = FALSE
            ORDER BY 
                CASE 
                    WHEN n.tipo = 'solicitacao_viagem' THEN 1
                    ELSE 2
                END,
                n.created_at DESC";

    $notificacoesGestor = Database::query($sql, ['2']);
    echo "Notificações não lidas para gestor ID 2: " . count($notificacoesGestor) . "<br>";
    
    if (!empty($notificacoesGestor)) {
        echo "<pre>";
        print_r($notificacoesGestor);
        echo "</pre>";
    }

    // 5. Testar contagem de notificações
    echo "<h2>5. Testando contagem de notificações</h2>";
    $sqlCount = "SELECT 
                    COUNT(*) as total_nao_lidas,
                    COUNT(CASE WHEN tipo = 'solicitacao_viagem' THEN 1 END) as solicitacoes_pendentes,
                    COUNT(CASE WHEN tipo = 'aprovacao_viagem' THEN 1 END) as aprovacoes,
                    COUNT(CASE WHEN tipo = 'negacao_viagem' THEN 1 END) as negacoes
                FROM notificacoes_push 
                WHERE user_id = '2' AND lida = FALSE";

    $contagem = Database::queryOne($sqlCount, ['2']);
    echo "<pre>";
    print_r($contagem);
    echo "</pre>";

    // 6. Criar notificação de teste
    echo "<h2>6. Criando notificação de teste</h2>";
    $sqlInsert = "INSERT INTO notificacoes_push (
        user_id, tipo, titulo, mensagem, lida, enviada, created_at
    ) VALUES (
        '2', 'solicitacao_viagem', '🧪 Notificação de Teste', 
        'Esta é uma notificação de teste criada pelo script', 
        FALSE, FALSE, NOW()
    )";

    $resultado = Database::execute($sqlInsert);
    if ($resultado->rowCount() > 0) {
        echo "✅ Notificação de teste criada com sucesso!<br>";
    } else {
        echo "❌ Erro ao criar notificação de teste<br>";
    }

    // 7. Testar API real
    echo "<h2>7. Testando API real</h2>";
    $url = "https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/api/gestao/notificacoes.php?acao=nao_lidas&user_id=2";
    echo "URL: $url<br>";
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    echo "HTTP Code: $httpCode<br>";
    echo "Response: <pre>" . htmlspecialchars($response) . "</pre>";

} catch (Exception $e) {
    echo "❌ Erro: " . $e->getMessage();
    Logger::error('Erro no teste de notificações', [
        'error' => $e->getMessage(),
        'trace' => $e->getTraceAsString()
    ]);
}
?> 
