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

echo "<h1>🔍 Calcular Soma Real dos Pontos GPS - Viagem #1</h1>";

try {
    $host = 'localhost';
    $dbname = 'pinheir3_controle_frotasV1.1';
    $username = 'pinheir3_admin';
    $password = '080880Gelboy';
    
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
    
    echo "<h2>1️⃣ Verificando Viagem #1</h2>";
    
    // Buscar viagem
    $stmt = $pdo->prepare("SELECT * FROM viagens WHERE id = 1");
    $stmt->execute();
    $viagem = $stmt->fetch();
    
    if (!$viagem) {
        echo "<p style='color: red;'>❌ Viagem #1 não encontrada!</p>";
        exit;
    }
    
    echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px; border: 1px solid #c3e6cb;'>";
    echo "<h3>📊 Dados da Viagem #1:</h3>";
    echo "<ul>";
    echo "<li><strong>ID:</strong> {$viagem['id']}</li>";
    echo "<li><strong>Cliente:</strong> {$viagem['cliente']}</li>";
    echo "<li><strong>KM Inicial:</strong> {$viagem['km_inicial']}</li>";
    echo "<li><strong>KM Final:</strong> {$viagem['km_final']}</li>";
    echo "<li><strong>KM Manual:</strong> " . ($viagem['km_final'] - $viagem['km_inicial']) . " km</li>";
    echo "<li><strong>KM GPS Atual:</strong> " . ($viagem['km_gps_final'] ?? 'NULL') . "</li>";
    echo "</ul>";
    echo "</div>";
    
    echo "<h2>2️⃣ Buscando Pontos GPS</h2>";
    
    // Buscar pontos GPS da viagem
    $stmt = $pdo->prepare("
        SELECT latitude, longitude, timestamp, velocidade, precisao
        FROM rastreamento_tempo_real 
        WHERE viagem_id = 1 
        ORDER BY timestamp ASC
    ");
    $stmt->execute();
    $pontos = $stmt->fetchAll();
    
    echo "<p><strong>Total de pontos GPS encontrados:</strong> " . count($pontos) . "</p>";
    
    if (count($pontos) < 2) {
        echo "<p style='color: red;'>❌ Poucos pontos GPS para calcular distância!</p>";
        echo "<p><strong>Pontos encontrados:</strong></p>";
        echo "<ul>";
        foreach ($pontos as $i => $ponto) {
            echo "<li><strong>Ponto " . ($i + 1) . ":</strong> Lat: {$ponto['latitude']}, Lon: {$ponto['longitude']}, Hora: {$ponto['timestamp']}</li>";
        }
        echo "</ul>";
        exit;
    }
    
    // Mostrar primeiros e últimos pontos
    echo "<p><strong>Primeiro ponto:</strong> Lat: {$pontos[0]['latitude']}, Lon: {$pontos[0]['longitude']}, Hora: {$pontos[0]['timestamp']}</p>";
    echo "<p><strong>Último ponto:</strong> Lat: {$pontos[count($pontos)-1]['latitude']}, Lon: {$pontos[count($pontos)-1]['longitude']}, Hora: {$pontos[count($pontos)-1]['timestamp']}</p>";
    
    echo "<h2>3️⃣ Calculando Distância Real (Haversine)</h2>";
    
    // Função para calcular distância entre dois pontos (Haversine)
    function haversine($lat1, $lon1, $lat2, $lon2) {
        $R = 6371; // Raio da Terra em km
        $dLat = deg2rad($lat2 - $lat1);
        $dLon = deg2rad($lon2 - $lon1);
        $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
        $c = 2 * atan2(sqrt($a), sqrt(1-$a));
        return $R * $c;
    }
    
    // Calcular distância total
    $distanciaTotal = 0;
    $distancias = [];
    
    echo "<p><strong>Calculando distância entre pontos consecutivos...</strong></p>";
    
    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;
        
        $distancias[] = [
            'ponto' => $i + 1,
            'de' => $i + 1,
            'para' => $i + 2,
            'distancia' => $distancia,
            'lat1' => $lat1,
            'lon1' => $lon1,
            'lat2' => $lat2,
            'lon2' => $lon2
        ];
    }
    
    echo "<p><strong>Distância total calculada:</strong> " . number_format($distanciaTotal, 3) . " km</p>";
    
    echo "<h2>4️⃣ Detalhamento das Distâncias</h2>";
    
    // Mostrar as 10 maiores distâncias
    usort($distancias, function($a, $b) {
        return $b['distancia'] <=> $a['distancia'];
    });
    
    echo "<p><strong>Top 10 maiores distâncias entre pontos:</strong></p>";
    echo "<table border='1' style='border-collapse: collapse; margin: 10px 0; width: 100%;'>";
    echo "<tr style='background: #f8f9fa;'>";
    echo "<th>Rank</th><th>Do Ponto</th><th>Para Ponto</th><th>Distância (km)</th><th>Lat1</th><th>Lon1</th><th>Lat2</th><th>Lon2</th>";
    echo "</tr>";
    
    for ($i = 0; $i < min(10, count($distancias)); $i++) {
        $d = $distancias[$i];
        echo "<tr>";
        echo "<td>" . ($i + 1) . "</td>";
        echo "<td>{$d['de']}</td>";
        echo "<td>{$d['para']}</td>";
        echo "<td>" . number_format($d['distancia'], 3) . "</td>";
        echo "<td>" . number_format($d['lat1'], 6) . "</td>";
        echo "<td>" . number_format($d['lon1'], 6) . "</td>";
        echo "<td>" . number_format($d['lat2'], 6) . "</td>";
        echo "<td>" . number_format($d['lon2'], 6) . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    echo "<h2>5️⃣ Análise da Diferença</h2>";
    
    $kmManual = $viagem['km_final'] - $viagem['km_inicial'];
    $diferenca = abs($kmManual - $distanciaTotal);
    $percentual = ($diferenca / $kmManual) * 100;
    
    echo "<div style='background: #fff3cd; padding: 15px; border-radius: 5px; border: 1px solid #ffeaa7;'>";
    echo "<h3>📊 COMPARAÇÃO:</h3>";
    echo "<ul>";
    echo "<li><strong>KM Manual (Odômetro):</strong> {$kmManual} km</li>";
    echo "<li><strong>KM GPS (Calculado):</strong> " . number_format($distanciaTotal, 3) . " km</li>";
    echo "<li><strong>Diferença:</strong> " . number_format($diferenca, 3) . " km</li>";
    echo "<li><strong>Percentual:</strong> " . number_format($percentual, 1) . "%</li>";
    echo "</ul>";
    echo "</div>";
    
    if ($diferenca > 5) {
        echo "<div style='background: #f8d7da; padding: 15px; border-radius: 5px; border: 1px solid #f5c6cb;'>";
        echo "<h3>⚠️ DIFERENÇA SIGNIFICATIVA DETECTADA:</h3>";
        echo "<p><strong>A diferença de " . number_format($diferenca, 1) . " km pode indicar:</strong></p>";
        echo "<ul>";
        echo "<li>❌ <strong>GPS desligado</strong> durante parte da viagem</li>";
        echo "<li>❌ <strong>Pontos GPS perdidos</strong> por problemas de sinal</li>";
        echo "<li>❌ <strong>Viagem feita em túnel</strong> ou área sem GPS</li>";
        echo "<li>❌ <strong>Problema de sincronização</strong> entre app e servidor</li>";
        echo "</ul>";
        echo "</div>";
    } else {
        echo "<div style='background: #d4edda; padding: 15px; border-radius: 5px; border: 1px solid #c3e6cb;'>";
        echo "<h3>✅ DIFERENÇA ACEITÁVEL:</h3>";
        echo "<p><strong>A diferença de " . number_format($diferenca, 1) . " km está dentro do esperado!</strong></p>";
        echo "<p>Pode ser devido a:</p>";
        echo "<ul>";
        echo "<li>✅ <strong>Variações de rota</strong> durante a viagem</li>";
        echo "<li>✅ <strong>Precisão do GPS</strong> (varia de 5-10 metros)</li>";
        echo "<li>✅ <strong>Paradas e desvios</strong> não registrados</li>";
        echo "</ul>";
        echo "</div>";
    }
    
    echo "<h2>6️⃣ Conclusão</h2>";
    
    echo "<div style='background: #d1ecf1; padding: 15px; border-radius: 5px; border: 1px solid #bee5eb;'>";
    echo "<h3>🎯 RESULTADO FINAL:</h3>";
    echo "<p><strong>KM GPS Real:</strong> " . number_format($distanciaTotal, 3) . " km</strong></p>";
    echo "<p><strong>KM Manual:</strong> {$kmManual} km</strong></p>";
    echo "<p><strong>Diferença:</strong> " . number_format($diferenca, 3) . " km</strong></p>";
    echo "<p><strong>Status:</strong> " . ($diferenca > 5 ? "⚠️ Diferença significativa" : "✅ Diferença aceitável") . "</p>";
    echo "</div>";
    
} catch (PDOException $e) {
    echo "<p style='color: red;'>❌ Erro de banco: " . $e->getMessage() . "</p>";
} catch (Exception $e) {
    echo "<p style='color: red;'>❌ Erro geral: " . $e->getMessage() . "</p>";
}
?>
