<?php
/**
 * 🔍 DIAGNÓSTICO: Por que km_gps_final está com valores baixos?
 * 
 * Este script vai analisar:
 * 1. Se os pontos GPS estão sendo salvos corretamente
 * 2. Se o cálculo da distância está funcionando
 * 3. Se há problemas na fórmula ou dados
 */

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 para calcular distância
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>🔍 DIAGNÓSTICO: Problema com km_gps_final</h1>";

// 1. Verificar viagens com km_gps_final baixo
echo "<h2>📊 1. Viagens com km_gps_final baixo</h2>";
$sql = "SELECT id, cliente, km_inicial, km_final, km_gps_final, 
               latitude_inicial, longitude_inicial, latitude_final, longitude_final,
               data_inicio, data_fim
        FROM viagens 
        WHERE km_gps_final <= 10 AND km_gps_final > 0
        ORDER BY km_gps_final ASC 
        LIMIT 10";

$stmt = $pdo->query($sql);
$viagens = $stmt->fetchAll();

echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
echo "<tr style='background: #f0f0f0;'>";
echo "<th>ID</th><th>Cliente</th><th>KM Inicial</th><th>KM Final</th><th>KM GPS</th>";
echo "<th>Lat Inicial</th><th>Lon Inicial</th><th>Lat Final</th><th>Lon Final</th>";
echo "<th>Data Início</th><th>Data Fim</th>";
echo "</tr>";

foreach ($viagens as $viagem) {
    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 style='background: #ffcccc;'><strong>{$viagem['km_gps_final']}</strong></td>";
    echo "<td>{$viagem['latitude_inicial']}</td>";
    echo "<td>{$viagem['longitude_inicial']}</td>";
    echo "<td>{$viagem['latitude_final']}</td>";
    echo "<td>{$viagem['longitude_final']}</td>";
    echo "<td>{$viagem['data_inicio']}</td>";
    echo "<td>{$viagem['data_fim']}</td>";
    echo "</tr>";
}
echo "</table>";

// 2. Verificar pontos GPS de uma viagem específica
if (!empty($viagens)) {
    $viagem_teste = $viagens[0];
    echo "<h2>📍 2. Análise dos pontos GPS da viagem #{$viagem_teste['id']}</h2>";
    
    // Verificar se há pontos na tabela rastreamento_tempo_real
    $sql = "SELECT COUNT(*) as total FROM rastreamento_tempo_real WHERE viagem_id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$viagem_teste['id']]);
    $total_pontos = $stmt->fetch()['total'];
    
    echo "<p><strong>Total de pontos GPS salvos:</strong> $total_pontos</p>";
    
    if ($total_pontos > 0) {
        // 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_teste['id']]);
        $pontos = $stmt->fetchAll();
        
        echo "<h3>📍 Primeiros 5 pontos GPS:</h3>";
        echo "<table border='1' style='border-collapse: collapse;'>";
        echo "<tr style='background: #f0f0f0;'>";
        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>";
        
        // Calcular distância real
        if (count($pontos) > 1) {
            echo "<h3>🧮 Cálculo da distância real:</h3>";
            $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;
                
                $calculos[] = [
                    'de' => ($i + 1),
                    'para' => ($i + 2),
                    'lat1' => $lat1,
                    'lon1' => $lon1,
                    'lat2' => $lat2,
                    'lon2' => $lon2,
                    'distancia' => $distancia
                ];
            }
            
            echo "<p><strong>Distância total calculada:</strong> " . number_format($distanciaTotal, 4) . " km</p>";
            echo "<p><strong>KM GPS atual no banco:</strong> " . number_format($viagem_teste['km_gps_final'], 4) . " km</p>";
            
            $diferenca = abs($distanciaTotal - $viagem_teste['km_gps_final']);
            echo "<p><strong>Diferença:</strong> " . number_format($diferenca, 4) . " km</p>";
            
            // Mostrar primeiros cálculos
            echo "<h4>🔢 Primeiros 3 cálculos de distância:</h4>";
            echo "<table border='1' style='border-collapse: collapse;'>";
            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>";
            
            for ($i = 0; $i < min(3, count($calculos)); $i++) {
                $calc = $calculos[$i];
                echo "<tr>";
                echo "<td>{$calc['de']}</td>";
                echo "<td>{$calc['para']}</td>";
                echo "<td>{$calc['lat1']}</td>";
                echo "<td>{$calc['lon1']}</td>";
                echo "<td>{$calc['lat2']}</td>";
                echo "<td>{$calc['lon2']}</td>";
                echo "<td>" . number_format($calc['distancia'], 6) . "</td>";
                echo "</tr>";
            }
            echo "</table>";
        }
    } else {
        echo "<p style='color: red;'>❌ Nenhum ponto GPS encontrado para esta viagem!</p>";
    }
}

// 3. Verificar se há problemas na fórmula
echo "<h2>🧮 3. Teste da fórmula Haversine</h2>";

// Teste com coordenadas conhecidas (São Paulo para Rio de Janeiro)
$lat1 = -23.5505; // São Paulo
$lon1 = -46.6333;
$lat2 = -22.9068; // Rio de Janeiro
$lon2 = -43.1729;

$distancia_teste = haversine($lat1, $lon1, $lat2, $lon2);
echo "<p><strong>Teste da fórmula:</strong> São Paulo → Rio de Janeiro</p>";
echo "<p>Distância calculada: " . number_format($distancia_teste, 2) . " km (esperado: ~358 km)</p>";

if (abs($distancia_teste - 358) < 10) {
    echo "<p style='color: green;'>✅ Fórmula Haversine está funcionando corretamente!</p>";
} else {
    echo "<p style='color: red;'>❌ Problema na fórmula Haversine!</p>";
}

// 4. Verificar se os dados GPS estão sendo salvos corretamente
echo "<h2>📡 4. Verificação da tabela rastreamento_tempo_real</h2>";

$sql = "SELECT COUNT(*) as total FROM rastreamento_tempo_real";
$stmt = $pdo->query($sql);
$total_rastreamento = $stmt->fetch()['total'];

echo "<p><strong>Total de registros na tabela rastreamento_tempo_real:</strong> $total_rastreamento</p>";

if ($total_rastreamento > 0) {
    // Verificar distribuição por viagem
    $sql = "SELECT viagem_id, COUNT(*) as pontos 
            FROM rastreamento_tempo_real 
            GROUP BY viagem_id 
            ORDER BY pontos DESC 
            LIMIT 10";
    $stmt = $pdo->query($sql);
    $distribuicao = $stmt->fetchAll();
    
    echo "<h3>📊 Distribuição de pontos por viagem:</h3>";
    echo "<table border='1' style='border-collapse: collapse;'>";
    echo "<tr style='background: #f0f0f0;'>";
    echo "<th>Viagem ID</th><th>Pontos GPS</th>";
    echo "</tr>";
    
    foreach ($distribuicao as $item) {
        echo "<tr>";
        echo "<td>{$item['viagem_id']}</td>";
        echo "<td>{$item['pontos']}</td>";
        echo "</tr>";
    }
    echo "</table>";
} else {
    echo "<p style='color: red;'>❌ Tabela rastreamento_tempo_real está vazia!</p>";
}

// 5. Conclusões e recomendações
echo "<h2>💡 5. Conclusões e Recomendações</h2>";

if (!empty($viagens)) {
    echo "<h3>🔍 Problemas identificados:</h3>";
    echo "<ul>";
    
    if ($total_pontos == 0) {
        echo "<li>❌ <strong>Nenhum ponto GPS salvo:</strong> O app não está enviando dados GPS para o servidor</li>";
    } else {
        echo "<li>⚠️ <strong>Poucos pontos GPS:</strong> Pode haver problemas na coleta de dados GPS</li>";
    }
    
    if (isset($distanciaTotal) && $distanciaTotal > 0) {
        if ($diferenca > 1) {
            echo "<li>❌ <strong>Diferença significativa:</strong> O cálculo atual difere muito do cálculo real</li>";
        } else {
            echo "<li>✅ <strong>Cálculo correto:</strong> A fórmula está funcionando, mas os dados podem estar incompletos</li>";
        }
    }
    
    echo "</ul>";
    
    echo "<h3>🔧 Ações recomendadas:</h3>";
    echo "<ul>";
    echo "<li>1. Verificar se o app está enviando dados GPS corretamente</li>";
    echo "<li>2. Verificar se a tabela rastreamento_tempo_real está sendo populada</li>";
    echo "<li>3. Verificar se há problemas de conectividade no envio dos dados</li>";
    echo "<li>4. Verificar se o GPS do dispositivo está funcionando</li>";
    echo "<li>5. Implementar logs mais detalhados no app para debug</li>";
    echo "</ul>";
}

echo "<hr>";
echo "<p><em>Diagnóstico gerado em: " . date('Y-m-d H:i:s') . "</em></p>";
?>
