<?php
header('Content-Type: text/html; charset=utf-8');

require_once 'conexao.php';

echo "<!DOCTYPE html>
<html>
<head>
    <title>Testar GPS das Rotas</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .success { color: green; }
        .error { color: red; }
        .warning { color: orange; }
        .info { color: blue; }
        table { border-collapse: collapse; width: 100%; margin: 20px 0; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
        .btn { background-color: #4CAF50; color: white; padding: 10px 20px; text-decoration: none; border-radius: 4px; }
        .btn-danger { background-color: #f44336; }
        .btn-warning { background-color: #ff9800; }
    </style>
</head>
<body>";

echo "<h1>🧮 Testar GPS das Rotas</h1>";

try {
    $pdo = conectarBanco();
    
    // Verificar se foi solicitada uma rota específica
    $rotaId = $_GET['rota_id'] ?? null;
    
    if ($rotaId) {
        // Testar GPS para uma rota específica
        echo "<h2>🎯 Testando GPS para Rota ID: $rotaId</h2>";
        
        $sqlRota = "SELECT id, titulo, status, km_estimado, km_real, data_inicio_real, data_fim_real 
                    FROM solicitacoes_rotas WHERE id = ?";
        $stmtRota = $pdo->prepare($sqlRota);
        $stmtRota->execute([$rotaId]);
        $rota = $stmtRota->fetch(PDO::FETCH_ASSOC);
        
        if (!$rota) {
            echo "<p class='error'>❌ Rota ID $rotaId não encontrada!</p>";
            exit;
        }
        
        echo "<h3>📋 Dados da Rota</h3>";
        echo "<table>";
        echo "<tr><th>Campo</th><th>Valor</th></tr>";
        echo "<tr><td>ID</td><td>{$rota['id']}</td></tr>";
        echo "<tr><td>Título</td><td>{$rota['titulo']}</td></tr>";
        echo "<tr><td>Status</td><td>{$rota['status']}</td></tr>";
        echo "<tr><td>KM Estimado</td><td>{$rota['km_estimado']}</td></tr>";
        echo "<tr><td>KM Real</td><td>{$rota['km_real']}</td></tr>";
        echo "<tr><td>Data Início</td><td>{$rota['data_inicio_real']}</td></tr>";
        echo "<tr><td>Data Fim</td><td>{$rota['data_fim_real']}</td></tr>";
        echo "</table>";
        
        // Buscar viagens da rota
        $sqlViagens = "SELECT v.id, v.cliente, v.trajeto, v.km_inicial, v.km_final, v.km_gps_final, v.data_inicio, v.data_fim 
                       FROM viagens v 
                       INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                       WHERE rv.solicitacao_rota_id = ?";
        $stmtViagens = $pdo->prepare($sqlViagens);
        $stmtViagens->execute([$rotaId]);
        $viagens = $stmtViagens->fetchAll(PDO::FETCH_ASSOC);
        
        echo "<h3>🚗 Viagens da Rota</h3>";
        echo "<table>";
        echo "<tr><th>ID</th><th>Cliente</th><th>KM Inicial</th><th>KM Final</th><th>KM GPS</th><th>Pontos GPS</th><th>Status GPS</th><th>Ação</th></tr>";
        
        $viagensComGps = 0;
        $viagensSemGps = 0;
        
        foreach ($viagens as $viagem) {
            $pontosCount = 0;
            $statusGps = "❌ Sem GPS";
            $acao = "";
            
            if ($viagem['trajeto']) {
                $pontos = json_decode($viagem['trajeto'], true);
                $pontosCount = $pontos ? count($pontos) : 0;
                
                if ($pontosCount > 0) {
                    $statusGps = "✅ Com GPS ($pontosCount pontos)";
                    $viagensComGps++;
                    $acao = "<a href='?rota_id=$rotaId&testar_viagem={$viagem['id']}' class='btn'>Testar</a>";
                } else {
                    $viagensSemGps++;
                    $acao = "<a href='?rota_id=$rotaId&simular_gps={$viagem['id']}' class='btn btn-warning'>Simular GPS</a>";
                }
            } else {
                $viagensSemGps++;
                $acao = "<a href='?rota_id=$rotaId&simular_gps={$viagem['id']}' class='btn btn-warning'>Simular GPS</a>";
            }
            
            echo "<tr>";
            echo "<td>{$viagem['id']}</td>";
            echo "<td>{$viagem['cliente']}</td>";
            echo "<td>{$viagem['km_inicial']}</td>";
            echo "<td>{$viagem['km_final']}</td>";
            echo "<td>" . ($viagem['km_gps_final'] ?: 'NULL') . "</td>";
            echo "<td>$pontosCount pontos</td>";
            echo "<td>$statusGps</td>";
            echo "<td>$acao</td>";
            echo "</tr>";
        }
        echo "</table>";
        
        echo "<h3>📊 Resumo</h3>";
        echo "<p><strong>Viagens com GPS:</strong> $viagensComGps</p>";
        echo "<p><strong>Viagens sem GPS:</strong> $viagensSemGps</p>";
        
        // Testar viagem específica
        $testarViagemId = $_GET['testar_viagem'] ?? null;
        if ($testarViagemId) {
            echo "<h3>🧮 Testando Viagem ID: $testarViagemId</h3>";
            
            $sqlTeste = "SELECT trajeto FROM viagens WHERE id = ?";
            $stmtTeste = $pdo->prepare($sqlTeste);
            $stmtTeste->execute([$testarViagemId]);
            $viagemTeste = $stmtTeste->fetch(PDO::FETCH_ASSOC);
            
            if ($viagemTeste && $viagemTeste['trajeto']) {
                $pontos = json_decode($viagemTeste['trajeto'], true);
                echo "<p><strong>Pontos GPS encontrados:</strong> " . count($pontos) . "</p>";
                
                if (count($pontos) > 0) {
                    echo "<h4>📍 Primeiros 5 pontos:</h4>";
                    echo "<table>";
                    echo "<tr><th>#</th><th>Latitude</th><th>Longitude</th><th>Timestamp</th><th>Velocidade</th></tr>";
                    
                    for ($i = 0; $i < min(5, count($pontos)); $i++) {
                        $ponto = $pontos[$i];
                        echo "<tr>";
                        echo "<td>" . ($i + 1) . "</td>";
                        echo "<td>" . ($ponto['latitude'] ?? 'N/A') . "</td>";
                        echo "<td>" . ($ponto['longitude'] ?? 'N/A') . "</td>";
                        echo "<td>" . ($ponto['timestamp'] ?? 'N/A') . "</td>";
                        echo "<td>" . ($ponto['velocidade'] ?? 'N/A') . "</td>";
                        echo "</tr>";
                    }
                    echo "</table>";
                    
                    // Calcular distância
                    if (count($pontos) >= 2) {
                        $distanciaTotal = 0;
                        for ($i = 1; $i < count($pontos); $i++) {
                            $pontoAnterior = $pontos[$i-1];
                            $pontoAtual = $pontos[$i];
                            
                            if (isset($pontoAnterior['latitude'], $pontoAnterior['longitude'], $pontoAtual['latitude'], $pontoAtual['longitude'])) {
                                // Calcular distância usando Haversine
                                $R = 6371; // Raio da Terra em km
                                $dLat = deg2rad($pontoAtual['latitude'] - $pontoAnterior['latitude']);
                                $dLon = deg2rad($pontoAtual['longitude'] - $pontoAnterior['longitude']);
                                $lat1 = deg2rad($pontoAnterior['latitude']);
                                $lat2 = deg2rad($pontoAtual['latitude']);
                                $a = sin($dLat/2) * sin($dLat/2) + cos($lat1) * cos($lat2) * sin($dLon/2) * sin($dLon/2);
                                $c = 2 * atan2(sqrt($a), sqrt(1-$a));
                                $distancia = $R * $c;
                                $distanciaTotal += $distancia;
                            }
                        }
                        
                        echo "<p class='success'><strong>✅ Distância calculada:</strong> " . number_format($distanciaTotal, 3) . " km</p>";
                        
                        // Atualizar km_gps_final
                        $sqlUpdate = "UPDATE viagens SET km_gps_final = ? WHERE id = ?";
                        $stmtUpdate = $pdo->prepare($sqlUpdate);
                        $success = $stmtUpdate->execute([$distanciaTotal, $testarViagemId]);
                        
                        if ($success) {
                            echo "<p class='success'>✅ KM GPS atualizado com sucesso!</p>";
                        } else {
                            echo "<p class='error'>❌ Erro ao atualizar KM GPS!</p>";
                        }
                    }
                }
            }
        }
        
        // Simular GPS para viagem
        $simularViagemId = $_GET['simular_gps'] ?? null;
        if ($simularViagemId) {
            echo "<h3>🎮 Simulando GPS para Viagem ID: $simularViagemId</h3>";
            
            // Criar pontos GPS simulados
            $pontosSimulados = [];
            $latInicial = -10.9091; // Centro de Aracaju
            $lonInicial = -37.0677;
            
            for ($i = 0; $i < 10; $i++) {
                $pontosSimulados[] = [
                    'latitude' => $latInicial + ($i * 0.001), // Pequena variação
                    'longitude' => $lonInicial + ($i * 0.001),
                    'timestamp' => date('Y-m-d H:i:s', time() - (10 - $i) * 60), // Últimos 10 minutos
                    'velocidade' => rand(20, 60),
                    'precisao' => rand(5, 15),
                    'altitude' => rand(10, 50),
                    'motorista_nome' => 'Motorista Teste'
                ];
            }
            
            $sqlUpdate = "UPDATE viagens SET trajeto = ? WHERE id = ?";
            $stmtUpdate = $pdo->prepare($sqlUpdate);
            $success = $stmtUpdate->execute([json_encode($pontosSimulados), $simularViagemId]);
            
            if ($success) {
                echo "<p class='success'>✅ GPS simulado com sucesso!</p>";
                echo "<p><strong>Pontos criados:</strong> " . count($pontosSimulados) . "</p>";
                
                // Recarregar página para mostrar dados atualizados
                echo "<script>setTimeout(function(){ location.reload(); }, 2000);</script>";
            } else {
                echo "<p class='error'>❌ Erro ao simular GPS!</p>";
            }
        }
        
    } else {
        // Listar rotas para teste
        echo "<h2>📊 Rotas Disponíveis para Teste</h2>";
        
        $sql = "SELECT sr.id, sr.titulo, sr.status, sr.km_estimado, sr.km_real, sr.data_fim_real,
                       COUNT(rv.viagem_id) as total_viagens,
                       SUM(CASE WHEN v.trajeto IS NOT NULL AND v.trajeto != '[]' THEN 1 ELSE 0 END) as viagens_com_gps,
                       SUM(CASE WHEN v.trajeto IS NULL OR v.trajeto = '[]' THEN 1 ELSE 0 END) as viagens_sem_gps
                FROM solicitacoes_rotas sr
                LEFT JOIN rota_viagens rv ON sr.id = rv.solicitacao_rota_id
                LEFT JOIN viagens v ON rv.viagem_id = v.id
                WHERE sr.status IN ('concluida', 'em_execucao')
                GROUP BY sr.id
                ORDER BY sr.data_fim_real DESC 
                LIMIT 20";
        
        $stmt = $pdo->query($sql);
        $rotas = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        if (empty($rotas)) {
            echo "<p class='warning'>⚠️ Nenhuma rota encontrada!</p>";
        } else {
            echo "<table>";
            echo "<tr><th>ID</th><th>Título</th><th>Status</th><th>KM Estimado</th><th>KM Real</th><th>Viagens</th><th>Com GPS</th><th>Sem GPS</th><th>Ação</th></tr>";
            
            foreach ($rotas as $rota) {
                $statusClass = $rota['viagens_sem_gps'] > 0 ? 'warning' : 'success';
                $statusText = $rota['viagens_sem_gps'] > 0 ? '⚠️ GPS Incompleto' : '✅ GPS Completo';
                
                echo "<tr>";
                echo "<td>{$rota['id']}</td>";
                echo "<td>{$rota['titulo']}</td>";
                echo "<td>{$rota['status']}</td>";
                echo "<td>{$rota['km_estimado']}</td>";
                echo "<td>{$rota['km_real']}</td>";
                echo "<td>{$rota['total_viagens']}</td>";
                echo "<td>{$rota['viagens_com_gps']}</td>";
                echo "<td>{$rota['viagens_sem_gps']}</td>";
                echo "<td><a href='?rota_id={$rota['id']}' class='btn'>Testar</a></td>";
                echo "</tr>";
            }
            echo "</table>";
        }
    }
    
} catch (Exception $e) {
    echo "<p class='error'>❌ Erro: " . $e->getMessage() . "</p>";
}

echo "</body></html>";
?>
