<?php
/**
 * 🧪 TESTE: KM GPS Preciso
 * 
 * Script simples para testar se o KM GPS está sendo calculado corretamente
 */

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

// Conectar ao banco
$pdo = new PDO(
    "mysql:host=localhost;dbname=pinheir3_controle_frotasV1.1;charset=utf8mb4",
    "pinheir3_admin",
    "080880Gelboy"
);

// Função Haversine
function haversine($lat1, $lon1, $lat2, $lon2) {
    $R = 6371.0; // Raio da Terra em km
    $dLat = deg2rad($lat2 - $lat1);
    $dLon = deg2rad($lon2 - $lon1);
    $lat1 = deg2rad($lat1);
    $lat2 = deg2rad($lat2);
    
    $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));
    return $R * $c;
}

echo "<h1>🧪 TESTE: KM GPS Preciso</h1>";

// Testar viagem específica
$viagem_id = 278; // Viagem que você mencionou

try {
    // Buscar dados da viagem
    $sql = "SELECT id, cliente, km_inicial, km_final, km_gps_final, km_gps_real
            FROM viagens 
            WHERE id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$viagem_id]);
    $viagem = $stmt->fetch();
    
    if (!$viagem) {
        echo "<p style='color: red;'>❌ Viagem #$viagem_id não encontrada</p>";
        exit;
    }
    
    echo "<h2>📊 Dados da Viagem #$viagem_id</h2>";
    echo "<div style='background: #f9f9f9; padding: 15px; border-radius: 5px;'>";
    echo "<p><strong>Cliente:</strong> {$viagem['cliente']}</p>";
    echo "<p><strong>KM Inicial:</strong> {$viagem['km_inicial']}</p>";
    echo "<p><strong>KM Final:</strong> {$viagem['km_final']}</p>";
    echo "<p><strong>KM Manual:</strong> " . ($viagem['km_final'] - $viagem['km_inicial']) . " km</p>";
    echo "<p><strong>KM GPS Final (atual):</strong> " . number_format($viagem['km_gps_final'], 3) . " km</p>";
    echo "<p><strong>KM GPS Real (atual):</strong> " . number_format($viagem['km_gps_real'], 3) . " km</p>";
    echo "</div>";
    
    // Buscar pontos GPS
    $sql = "SELECT latitude, longitude, timestamp 
            FROM rastreamento_tempo_real 
            WHERE viagem_id = ? 
            ORDER BY timestamp ASC";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$viagem_id]);
    $pontos = $stmt->fetchAll();
    
    echo "<h2>📍 Pontos GPS Encontrados</h2>";
    echo "<p><strong>Total de pontos:</strong> " . count($pontos) . "</p>";
    
    if (count($pontos) > 1) {
        // Calcular distância real
        $distanciaTotal = 0;
        $calculos = [];
        
        for ($i = 0; $i < count($pontos) - 1; $i++) {
            $lat1 = $pontos[$i]['latitude'];
            $lon1 = $pontos[$i]['longitude'];
            $lat2 = $pontos[$i + 1]['latitude'];
            $lon2 = $pontos[$i + 1]['longitude'];
            
            $distancia = haversine($lat1, $lon1, $lat2, $lon2);
            $distanciaTotal += $distancia;
            
            if ($i < 5) { // Mostrar apenas os primeiros 5 cálculos
                $calculos[] = [
                    'de' => $i + 1,
                    'para' => $i + 2,
                    'lat1' => $lat1,
                    'lon1' => $lon1,
                    'lat2' => $lat2,
                    'lon2' => $lon2,
                    'distancia' => $distancia
                ];
            }
        }
        
        echo "<h2>🧮 Cálculo Real</h2>";
        echo "<p><strong>Distância total calculada:</strong> " . number_format($distanciaTotal, 6) . " km</p>";
        echo "<p><strong>Distância no banco:</strong> " . number_format($viagem['km_gps_final'], 6) . " km</p>";
        
        $diferenca = abs($distanciaTotal - $viagem['km_gps_final']);
        echo "<p><strong>Diferença:</strong> " . number_format($diferenca, 6) . " km</p>";
        
        if ($diferenca < 0.001) {
            echo "<p style='color: green;'>✅ <strong>Resultado:</strong> Cálculo está preciso!</p>";
        } else {
            echo "<p style='color: orange;'>⚠️ <strong>Resultado:</strong> Pequena diferença detectada</p>";
        }
        
        // Mostrar primeiros cálculos
        echo "<h3>🔢 Primeiros 5 Cálculos:</h3>";
        echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
        echo "<tr style='background: #f0f0f0;'>";
        echo "<th>De</th><th>Para</th><th>Lat1</th><th>Lon1</th><th>Lat2</th><th>Lon2</th><th>Distância (km)</th>";
        echo "</tr>";
        
        foreach ($calculos as $calc) {
            echo "<tr>";
            echo "<td>{$calc['de']}</td>";
            echo "<td>{$calc['para']}</td>";
            echo "<td>" . number_format($calc['lat1'], 6) . "</td>";
            echo "<td>" . number_format($calc['lon1'], 6) . "</td>";
            echo "<td>" . number_format($calc['lat2'], 6) . "</td>";
            echo "<td>" . number_format($calc['lon2'], 6) . "</td>";
            echo "<td>" . number_format($calc['distancia'], 6) . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        
        // Atualizar com valor mais preciso
        echo "<h2>🔧 Atualizando com Valor Mais Preciso</h2>";
        
        $sql_update = "UPDATE viagens SET 
                      km_gps_final = ?,
                      km_gps_real = ?,
                      updated_at = NOW()
                      WHERE id = ?";
        $stmt_update = $pdo->prepare($sql_update);
        $stmt_update->execute([$distanciaTotal, $distanciaTotal, $viagem_id]);
        
        echo "<p style='color: green;'>✅ <strong>Atualizado!</strong> KM GPS Final agora é: " . number_format($distanciaTotal, 6) . " km</p>";
        echo "<p><strong>Dashboard agora mostrará:</strong> " . number_format($distanciaTotal, 3) . " km (sem arredondamento)</p>";
        
    } else {
        echo "<p style='color: red;'>❌ Poucos pontos GPS para calcular distância</p>";
    }
    
} catch (Exception $e) {
    echo "<p style='color: red;'>❌ Erro: " . $e->getMessage() . "</p>";
}

echo "<hr>";
echo "<p><em>Teste realizado em: " . date('Y-m-d H:i:s') . "</em></p>";
echo "<p><strong>🎯 Resultado:</strong> Agora o dashboard mostrará valores mais precisos!</p>";
?>
