<?php
require_once 'conexao.php';

echo "<h1>🔍 INVESTIGANDO GPS - POR QUE SÓ 2 METROS?</h1>\n";

try {
    $pdo = conectarBanco();
    
    // 1. Verificar dados da viagem da rota 49
    echo "<h2>1. Dados da Viagem da Rota 49</h2>\n";
    $sql = "SELECT v.*, rv.solicitacao_rota_id 
            FROM viagens v
            INNER JOIN rota_viagens rv ON v.id = rv.viagem_id
            WHERE rv.solicitacao_rota_id = 49";
    
    $stmt = $pdo->query($sql);
    $viagens = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (!empty($viagens)) {
        echo "<p><strong>✅ Viagens encontradas:</strong></p>\n";
        echo "<table border='1'>\n";
        echo "<tr><th>Viagem ID</th><th>Cliente</th><th>KM Inicial</th><th>KM Final</th><th>KM GPS Final</th><th>Trajeto</th><th>Data Início</th><th>Data Fim</th></tr>\n";
        foreach ($viagens as $viagem) {
            $trajetoSize = $viagem['trajeto'] ? count(json_decode($viagem['trajeto'], true)) : 0;
            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']} (" . (($viagem['km_gps_final'] ?? 0) / 1000) . " km)</td>";
            echo "<td>{$trajetoSize} pontos</td>";
            echo "<td>{$viagem['data_inicio']}</td>";
            echo "<td>{$viagem['data_fim']}</td>";
            echo "</tr>\n";
        }
        echo "</table>\n";
    } else {
        echo "<p><strong>❌ Nenhuma viagem encontrada para rota 49</strong></p>\n";
    }
    
    // 2. Analisar trajeto da primeira viagem
    if (!empty($viagens)) {
        $primeiraViagem = $viagens[0];
        echo "<h2>2. Análise do Trajeto da Viagem {$primeiraViagem['id']}</h2>\n";
        
        if ($primeiraViagem['trajeto']) {
            $trajeto = json_decode($primeiraViagem['trajeto'], true);
            echo "<p><strong>Total de pontos GPS:</strong> " . count($trajeto) . "</p>\n";
            
            if (count($trajeto) >= 2) {
                // Mostrar primeiros e últimos pontos
                echo "<p><strong>Primeiros 3 pontos:</strong></p>\n";
                for ($i = 0; $i < min(3, count($trajeto)); $i++) {
                    $ponto = $trajeto[$i];
                    echo "<p>Ponto " . ($i + 1) . ": Lat {$ponto[1]}, Lon {$ponto[0]}</p>\n";
                }
                
                echo "<p><strong>Últimos 3 pontos:</strong></p>\n";
                for ($i = max(0, count($trajeto) - 3); $i < count($trajeto); $i++) {
                    $ponto = $trajeto[$i];
                    echo "<p>Ponto " . ($i + 1) . ": Lat {$ponto[1]}, Lon {$ponto[0]}</p>\n";
                }
                
                // Calcular distância manualmente
                echo "<h3>3. Cálculo Manual da Distância GPS</h3>\n";
                $distanciaTotal = 0;
                $pontosComDistancia = 0;
                
                for ($i = 1; $i < count($trajeto); $i++) {
                    $pontoAnterior = $trajeto[$i-1];
                    $pontoAtual = $trajeto[$i];
                    
                    if (isset($pontoAnterior[0], $pontoAnterior[1], $pontoAtual[0], $pontoAtual[1])) {
                        // Calcular distância usando Haversine
                        $R = 6371; // Raio da Terra em km
                        $dLat = deg2rad($pontoAtual[1] - $pontoAnterior[1]);
                        $dLon = deg2rad($pontoAtual[0] - $pontoAnterior[0]);
                        $lat1 = deg2rad($pontoAnterior[1]);
                        $lat2 = deg2rad($pontoAtual[1]);
                        $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;
                        $pontosComDistancia++;
                        
                        if ($i <= 5 || $i >= count($trajeto) - 5) {
                            echo "<p>Segmento " . $i . ": " . number_format($distancia, 6) . " km</p>\n";
                        }
                    }
                }
                
                echo "<p><strong>Distância total calculada:</strong> " . number_format($distanciaTotal, 6) . " km</p>\n";
                echo "<p><strong>Distância total em metros:</strong> " . number_format($distanciaTotal * 1000, 2) . " m</p>\n";
                echo "<p><strong>Pontos com distância calculada:</strong> $pontosComDistancia</p>\n";
                
                // Comparar com o valor salvo
                $valorSalvo = $primeiraViagem['km_gps_final'] ?? 0;
                echo "<p><strong>Valor salvo no banco:</strong> $valorSalvo metros</p>\n";
                echo "<p><strong>Diferença:</strong> " . (($distanciaTotal * 1000) - $valorSalvo) . " metros</p>\n";
                
                if (abs(($distanciaTotal * 1000) - $valorSalvo) > 1) {
                    echo "<p><strong>⚠️ PROBLEMA IDENTIFICADO:</strong> O valor calculado (" . number_format($distanciaTotal * 1000, 2) . "m) é diferente do valor salvo ($valorSalvo m)</p>\n";
                } else {
                    echo "<p><strong>✅ Valores coincidem!</strong></p>\n";
                }
            } else {
                echo "<p><strong>❌ Trajeto tem menos de 2 pontos</strong></p>\n";
            }
        } else {
            echo "<p><strong>❌ Trajeto está vazio</strong></p>\n";
        }
    }
    
    // 4. Verificar se há problemas no app Android
    echo "<h2>4. Possíveis Causas</h2>\n";
    echo "<ul>\n";
    echo "<li><strong>App Android:</strong> Pode estar salvando apenas 2 metros quando deveria salvar 2000 metros</li>\n";
    echo "<li><strong>Conversão de unidades:</strong> Pode estar convertendo km para metros incorretamente</li>\n";
    echo "<li><strong>Precisão GPS:</strong> Pode estar capturando pontos muito próximos</li>\n";
    echo "<li><strong>Filtro de pontos:</strong> Pode estar filtrando pontos importantes</li>\n";
    echo "</ul>\n";
    
    // 5. Sugestões de correção
    echo "<h2>5. Sugestões de Correção</h2>\n";
    echo "<ol>\n";
    echo "<li><strong>Verificar app Android:</strong> Confirmar se está enviando 2000 metros em vez de 2</li>\n";
    echo "<li><strong>Testar nova viagem:</strong> Fazer uma nova viagem para ver se o problema persiste</li>\n";
    echo "<li><strong>Verificar logs do app:</strong> Ver se há erros no cálculo GPS</li>\n";
    echo "<li><strong>Recalcular manualmente:</strong> Atualizar o valor no banco se necessário</li>\n";
    echo "</ol>\n";
    
} catch (Exception $e) {
    echo "<p><strong>❌ Erro:</strong> " . $e->getMessage() . "</p>\n";
}
?>
