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

echo "<h1>🔧 Corrigir KM GPS da 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 "<p><strong>Viagem encontrada:</strong></p>";
    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 "<h2>2️⃣ Verificando Pontos GPS</h2>";
    
    // Buscar pontos GPS da viagem
    $stmt = $pdo->prepare("
        SELECT latitude, longitude, timestamp 
        FROM rastreamento_tempo_real 
        WHERE viagem_id = 1 
        ORDER BY timestamp ASC
    ");
    $stmt->execute();
    $pontos = $stmt->fetchAll();
    
    echo "<p><strong>Pontos GPS encontrados:</strong> " . count($pontos) . "</p>";
    
    if (count($pontos) < 2) {
        echo "<p style='color: red;'>❌ Poucos pontos GPS para calcular distância!</p>";
        exit;
    }
    
    // Mostrar primeiros e últimos pontos
    echo "<p><strong>Primeiro ponto:</strong> Lat: {$pontos[0]['latitude']}, Lon: {$pontos[0]['longitude']}</p>";
    echo "<p><strong>Último ponto:</strong> Lat: {$pontos[count($pontos)-1]['latitude']}, Lon: {$pontos[count($pontos)-1]['longitude']}</p>";
    
    echo "<h2>3️⃣ Calculando Distância Real</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;
    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;
    }
    
    echo "<p><strong>Distância calculada:</strong> " . number_format($distanciaTotal, 3) . " km</p>";
    echo "<p><strong>Distância em metros:</strong> " . number_format($distanciaTotal * 1000, 2) . " m</p>";
    
    echo "<h2>4️⃣ Atualizando KM GPS</h2>";
    
    // Atualizar km_gps_final com o valor correto
    $kmGpsCorrigido = $distanciaTotal * 1000; // Salvar em metros para compatibilidade
    
    $stmt = $pdo->prepare("UPDATE viagens SET km_gps_final = ? WHERE id = 1");
    $stmt->execute([$kmGpsCorrigido]);
    
    if ($stmt->rowCount() > 0) {
        echo "<p style='color: green;'>✅ KM GPS atualizado com sucesso!</p>";
        echo "<p><strong>Valor anterior:</strong> " . ($viagem['km_gps_final'] ?? 'NULL') . "</p>";
        echo "<p><strong>Valor novo:</strong> " . number_format($kmGpsCorrigido, 2) . " metros (" . number_format($distanciaTotal, 3) . " km)</p>";
    } else {
        echo "<p style='color: red;'>❌ Erro ao atualizar KM GPS!</p>";
    }
    
    echo "<h2>5️⃣ Verificando Correção</h2>";
    
    // Verificar se foi atualizado
    $stmt = $pdo->prepare("SELECT km_gps_final FROM viagens WHERE id = 1");
    $stmt->execute();
    $resultado = $stmt->fetch();
    
    echo "<p><strong>KM GPS após correção:</strong> " . number_format($resultado['km_gps_final'], 2) . " metros</p>";
    echo "<p><strong>Em quilômetros:</strong> " . number_format($resultado['km_gps_final'] / 1000, 3) . " km</p>";
    
    echo "<hr>";
    echo "<h2>🎯 Resumo da Correção</h2>";
    echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px;'>";
    echo "<p><strong>✅ Problema resolvido!</strong></p>";
    echo "<ul>";
    echo "<li><strong>KM Manual:</strong> " . ($viagem['km_final'] - $viagem['km_inicial']) . " km</li>";
    echo "<li><strong>KM GPS (corrigido):</strong> " . number_format($distanciaTotal, 3) . " km</li>";
    echo "<li><strong>Diferença:</strong> " . number_format(abs(($viagem['km_final'] - $viagem['km_inicial']) - $distanciaTotal), 3) . " km</li>";
    echo "</ul>";
    echo "<p><strong>💡 Agora o dashboard deve mostrar o KM GPS correto!</strong></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>";
}
?>
