<?php
header('Content-Type: text/html; charset=utf-8');
echo "<h2>🧮 Teste Cálculo de Distância</h2>";

try {
    require_once 'config/database.php';
    $pdo = Database::getConnection();
    
    // 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;
    }
    
    // 1. Buscar pontos GPS da viagem 1
    echo "<h3>1. Pontos GPS da Viagem 1</h3>";
    
    $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>📊 Total de pontos:</strong> " . count($pontos) . "</p>";
    
    if (count($pontos) > 0) {
        echo "<div style='background: #f8f9fa; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
        echo "<h4>📍 Primeiros 5 pontos:</h4>";
        echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
        echo "<tr style='background: #e3f2fd;'>";
        echo "<th>#</th><th>Latitude</th><th>Longitude</th><th>Timestamp</th>";
        echo "</tr>";
        
        for ($i = 0; $i < min(5, count($pontos)); $i++) {
            $ponto = $pontos[$i];
            echo "<tr>";
            echo "<td>" . ($i + 1) . "</td>";
            echo "<td>{$ponto['latitude']}</td>";
            echo "<td>{$ponto['longitude']}</td>";
            echo "<td>{$ponto['timestamp']}</td>";
            echo "</tr>";
        }
        echo "</table>";
        echo "</div>";
        
        echo "<div style='background: #f8f9fa; padding: 15px; border: 1px solid #ddd; border-radius: 5px; margin-top: 10px;'>";
        echo "<h4>📍 Últimos 5 pontos:</h4>";
        echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
        echo "<tr style='background: #e3f2fd;'>";
        echo "<th>#</th><th>Latitude</th><th>Longitude</th><th>Timestamp</th>";
        echo "</tr>";
        
        $ultimosPontos = array_slice($pontos, -5);
        foreach ($ultimosPontos as $i => $ponto) {
            echo "<tr>";
            echo "<td>" . (count($pontos) - 4 + $i) . "</td>";
            echo "<td>{$ponto['latitude']}</td>";
            echo "<td>{$ponto['longitude']}</td>";
            echo "<td>{$ponto['timestamp']}</td>";
            echo "</tr>";
        }
        echo "</table>";
        echo "</div>";
    }
    
    // 2. Calcular distância total
    echo "<h3>2. Cálculo de Distância</h3>";
    
    if (count($pontos) > 1) {
        $distanciaTotal = 0;
        $segmentos = [];
        
        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'];
            
            // Calcular distância usando fórmula de Haversine
            $distancia = haversine($lat1, $lon1, $lat2, $lon2);
            $distanciaTotal += $distancia;
            
            $segmentos[] = [
                'de' => ($i + 1),
                'para' => ($i + 2),
                'distancia' => $distancia,
                'lat1' => $lat1,
                'lon1' => $lon1,
                'lat2' => $lat2,
                'lon2' => $lon2
            ];
        }
        
        echo "<div style='background: #e8f5e8; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
        echo "<h4>✅ Resultado do Cálculo:</h4>";
        echo "<p><strong>Distância Total:</strong> " . number_format($distanciaTotal, 6) . " km</p>";
        echo "<p><strong>Distância em Metros:</strong> " . number_format($distanciaTotal * 1000, 2) . " metros</p>";
        echo "<p><strong>Total de Segmentos:</strong> " . count($segmentos) . "</p>";
        echo "</div>";
        
        // 3. Mostrar alguns segmentos para debug
        echo "<h3>3. Primeiros 10 Segmentos</h3>";
        echo "<div style='background: #fff3e0; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
        echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
        echo "<tr style='background: #e3f2fd;'>";
        echo "<th>Segmento</th><th>Distância (km)</th><th>Distância (m)</th><th>Lat1</th><th>Lon1</th><th>Lat2</th><th>Lon2</th>";
        echo "</tr>";
        
        for ($i = 0; $i < min(10, count($segmentos)); $i++) {
            $seg = $segmentos[$i];
            echo "<tr>";
            echo "<td>{$seg['de']} → {$seg['para']}</td>";
            echo "<td>" . number_format($seg['distancia'], 6) . "</td>";
            echo "<td>" . number_format($seg['distancia'] * 1000, 2) . "</td>";
            echo "<td>{$seg['lat1']}</td>";
            echo "<td>{$seg['lon1']}</td>";
            echo "<td>{$seg['lat2']}</td>";
            echo "<td>{$seg['lon2']}</td>";
            echo "</tr>";
        }
        echo "</table>";
        echo "</div>";
        
        // 4. Verificar viagem atual
        echo "<h3>4. Status da Viagem</h3>";
        
                 $stmt = $pdo->prepare("SELECT id, cliente, km_gps_final, data_fim FROM viagens WHERE id = 1");
        $stmt->execute();
        $viagem = $stmt->fetch();
        
        if ($viagem) {
            echo "<div style='background: #f8f9fa; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
            echo "<h4>📊 Dados da Viagem:</h4>";
            echo "<p><strong>ID:</strong> {$viagem['id']}</p>";
            echo "<p><strong>Cliente:</strong> {$viagem['cliente']}</p>";
                         echo "<p><strong>km_gps_final atual:</strong> " . ($viagem['km_gps_final'] ?: 'NULL') . " km</p>";
            echo "<p><strong>Data fim:</strong> " . ($viagem['data_fim'] ?: 'NULL (em andamento)') . "</p>";
            echo "</div>";
            
                         // 5. Atualizar km_gps_final se necessário
             if ($viagem['km_gps_final'] == 0 || $viagem['km_gps_final'] === null) {
                echo "<h3>5. Atualizar km_gps_final</h3>";
                
                                 if (isset($_POST['atualizar_km_gps'])) {
                     $stmt = $pdo->prepare("UPDATE viagens SET km_gps_final = ? WHERE id = 1");
                     $resultado = $stmt->execute([$distanciaTotal]);
                    
                    if ($resultado) {
                        echo "<div style='background: #e8f5e8; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
                        echo "<h4>✅ km_gps_final atualizado com sucesso!</h4>";
                                                 echo "<p><strong>Valor anterior:</strong> " . ($viagem['km_gps_final'] ?: 'NULL') . " km</p>";
                         echo "<p><strong>Novo valor:</strong> " . number_format($distanciaTotal, 6) . " km</p>";
                         echo "<p><strong>Em metros:</strong> " . number_format($distanciaTotal * 1000, 2) . " metros</p>";
                        echo "</div>";
                    } else {
                        echo "<div style='background: #ffebee; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
                        echo "<h4>❌ Erro ao atualizar km_gps_final</h4>";
                        echo "</div>";
                    }
                } else {
                    echo "<div style='background: #fff3e0; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
                    echo "<h4>🔧 Ação Necessária:</h4>";
                    echo "<p>O <strong>km_gps_final</strong> está zerado ou NULL. Clique no botão abaixo para atualizar com o valor calculado.</p>";
                    echo "<form method='post'>";
                    echo "<button type='submit' name='atualizar_km_gps' style='background: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer;'>🔧 Atualizar km_gps_final</button>";
                    echo "</form>";
                    echo "</div>";
                }
            } else {
                echo "<div style='background: #e8f5e8; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
                echo "<h4>✅ km_gps_final já está configurado</h4>";
                echo "<p><strong>Valor atual:</strong> " . number_format($viagem['km_gps_final'], 6) . " km</p>";
                echo "<p><strong>Valor calculado:</strong> " . number_format($distanciaTotal, 6) . " km</p>";
                
                $diferenca = abs($viagem['km_gps_final'] - $distanciaTotal);
                if ($diferenca < 0.001) {
                    echo "<p style='color: green;'>✅ Valores idênticos!</p>";
                } else {
                    echo "<p style='color: orange;'>⚠️ Pequena diferença: " . number_format($diferenca, 6) . " km</p>";
                }
                echo "</div>";
            }
        }
        
    } else {
        echo "<div style='background: #ffebee; padding: 15px; border: 1px solid #ddd; border-radius: 5px;'>";
        echo "<h4>❌ Poucos pontos GPS</h4>";
        echo "<p>É necessário pelo menos 2 pontos GPS para calcular a distância.</p>";
        echo "</div>";
    }
    
} catch (Exception $e) {
    echo "❌ Erro: " . $e->getMessage() . "<br>";
}

echo "<h3>✅ Teste Concluído!</h3>";
echo "<p><strong>Resumo:</strong> Este script testa o cálculo de distância com os dados reais da viagem.</p>";
?>
