<?php
/**
 * DEBUG KM GPS
 * Verificar problema com cálculo e exibição do KM GPS
 */

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

// Conectar ao banco
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = '080880Gelboy';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "<h1>🔍 DEBUG KM GPS</h1>";
    
    // Verificar últimas 5 viagens
    $stmt = $pdo->query("
        SELECT 
            id, cliente, data_inicio, data_fim,
            km_inicial, km_final, 
            km_gps_final, 
            (km_final - km_inicial) as km_odometro_calculado,
            latitude_inicial, longitude_inicial,
            latitude_final, longitude_final
        FROM viagens 
        WHERE data_fim IS NOT NULL
        ORDER BY data_fim DESC 
        LIMIT 5
    ");
    $viagens = $stmt->fetchAll();
    
    echo "<h2>📊 ÚLTIMAS 5 VIAGENS FINALIZADAS:</h2>";
    echo "<table border='1' style='border-collapse: collapse; width: 100%; font-size: 12px;'>";
    echo "<tr>";
    echo "<th>ID</th>";
    echo "<th>Cliente</th>";
    echo "<th>Data Fim</th>";
    echo "<th>KM Inicial</th>";
    echo "<th>KM Final</th>";
    echo "<th>KM Odômetro<br>(Calculado)</th>";
    echo "<th>KM GPS Final<br>(Banco)</th>";
    echo "<th>GPS Inicial</th>";
    echo "<th>GPS Final</th>";
    echo "<th>Status KM GPS</th>";
    echo "</tr>";
    
    foreach ($viagens as $v) {
        $statusKmGps = '';
        $corStatus = '';
        
        if (empty($v['km_gps_final']) || $v['km_gps_final'] == 0) {
            $statusKmGps = '❌ VAZIO/ZERO';
            $corStatus = 'red';
        } elseif ($v['km_gps_final'] < $v['km_odometro_calculado']) {
            $diferenca = $v['km_odometro_calculado'] - $v['km_gps_final'];
            $statusKmGps = "⚠️ -{$diferenca} km";
            $corStatus = 'orange';
        } else {
            $statusKmGps = '✅ OK';
            $corStatus = 'green';
        }
        
        echo "<tr>";
        echo "<td><strong>{$v['id']}</strong></td>";
        echo "<td>{$v['cliente']}</td>";
        echo "<td>" . date('d/m H:i', strtotime($v['data_fim'])) . "</td>";
        echo "<td>{$v['km_inicial']}</td>";
        echo "<td>{$v['km_final']}</td>";
        echo "<td><strong>{$v['km_odometro_calculado']} km</strong></td>";
        echo "<td>" . ($v['km_gps_final'] ?: '<span style="color:red">NULL</span>') . "</td>";
        echo "<td>" . ($v['latitude_inicial'] ? "✅" : "❌") . "</td>";
        echo "<td>" . ($v['latitude_final'] ? "✅" : "❌") . "</td>";
        echo "<td style='color: $corStatus;'><strong>$statusKmGps</strong></td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // Análise dos problemas
    echo "<h2>🚨 PROBLEMAS IDENTIFICADOS:</h2>";
    
    $stmt = $pdo->query("
        SELECT 
            COUNT(*) as total_finalizadas,
            SUM(CASE WHEN km_gps_final IS NULL OR km_gps_final = 0 THEN 1 ELSE 0 END) as sem_km_gps,
            SUM(CASE WHEN km_gps_final > 0 THEN 1 ELSE 0 END) as com_km_gps,
            AVG(CASE WHEN km_gps_final > 0 AND km_final > km_inicial THEN (km_final - km_inicial) - km_gps_final ELSE NULL END) as diferenca_media
        FROM viagens 
        WHERE data_fim IS NOT NULL
    ");
    $stats = $stmt->fetch();
    
    echo "<div style='background: #fff3cd; padding: 15px; border-radius: 5px;'>";
    echo "<h3>📈 ESTATÍSTICAS:</h3>";
    echo "<ul>";
    echo "<li><strong>Total de viagens finalizadas:</strong> {$stats['total_finalizadas']}</li>";
    echo "<li><strong>Sem KM GPS:</strong> {$stats['sem_km_gps']} (" . round($stats['sem_km_gps']/$stats['total_finalizadas']*100,1) . "%)</li>";
    echo "<li><strong>Com KM GPS:</strong> {$stats['com_km_gps']} (" . round($stats['com_km_gps']/$stats['total_finalizadas']*100,1) . "%)</li>";
    if ($stats['diferenca_media']) {
        echo "<li><strong>Diferença média (Odômetro - GPS):</strong> " . round($stats['diferenca_media'], 2) . " km</li>";
    }
    echo "</ul>";
    echo "</div>";
    
    if ($stats['sem_km_gps'] > 0) {
        echo "<div style='background: #f8d7da; padding: 15px; border-radius: 5px; margin: 10px 0;'>";
        echo "<h3>❌ PROBLEMA 1: KM GPS NÃO ESTÁ SENDO SALVO</h3>";
        echo "<p><strong>Causa possível:</strong></p>";
        echo "<ul>";
        echo "<li>App Android não está enviando o campo 'km_rodados' na finalização</li>";
        echo "<li>API não está recebendo ou processando o valor corretamente</li>";
        echo "<li>Campo km_gps_final não está sendo atualizado no UPDATE</li>";
        echo "</ul>";
        echo "</div>";
    }
    
    if ($stats['diferenca_media'] && $stats['diferenca_media'] > 0.5) {
        echo "<div style='background: #fff3cd; padding: 15px; border-radius: 5px; margin: 10px 0;'>";
        echo "<h3>⚠️ PROBLEMA 2: KM GPS SEMPRE MENOR QUE ODÔMETRO</h3>";
        echo "<p><strong>Diferença média:</strong> " . round($stats['diferenca_media'], 2) . " km</p>";
        echo "<p><strong>Causas possíveis:</strong></p>";
        echo "<ul>";
        echo "<li>Cálculo do GPS no app está incorreto</li>";
        echo "<li>GPS não está captando toda a distância percorrida</li>";
        echo "<li>Conversão de unidades está errada (metros para km)</li>";
        echo "<li>Precisão do GPS afetada por sinal fraco</li>";
        echo "</ul>";
        echo "</div>";
    }
    
    // Verificar estrutura da tabela
    echo "<h2>🔧 VERIFICAÇÃO DA ESTRUTURA DO BANCO:</h2>";
    $stmt = $pdo->query("DESCRIBE viagens");
    $colunas = $stmt->fetchAll();
    
    $camposKm = [];
    foreach ($colunas as $coluna) {
        if (strpos(strtolower($coluna['Field']), 'km') !== false) {
            $camposKm[] = $coluna;
        }
    }
    
    echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
    echo "<tr><th>Campo</th><th>Tipo</th><th>Nulo</th><th>Padrão</th></tr>";
    foreach ($camposKm as $campo) {
        echo "<tr>";
        echo "<td><strong>{$campo['Field']}</strong></td>";
        echo "<td>{$campo['Type']}</td>";
        echo "<td>{$campo['Null']}</td>";
        echo "<td>" . ($campo['Default'] ?: 'NULL') . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // Verificar logs da API (últimas entradas)
    echo "<h2>📝 VERIFICAR LOGS DA API:</h2>";
    echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px;'>";
    echo "<h3>🔍 PRÓXIMOS PASSOS PARA DEBUG:</h3>";
    echo "<ol>";
    echo "<li><strong>Verificar logs do PHP:</strong> error_log do servidor para ver se km_rodados está chegando</li>";
    echo "<li><strong>Testar finalização manual:</strong> Simular uma finalização com dados controlados</li>";
    echo "<li><strong>Verificar app Android:</strong> Como está calculando e enviando o km_rodados</li>";
    echo "<li><strong>Corrigir dashboard:</strong> Verificar se está mostrando km_gps_final ou outro campo</li>";
    echo "</ol>";
    echo "</div>";
    
    // Solução imediata para dashboard
    echo "<h2>🚀 CORREÇÃO IMEDIATA PARA O DASHBOARD:</h2>";
    echo "<div style='background: #d4edda; padding: 15px; border-radius: 5px;'>";
    echo "<p>Se o problema é que o dashboard não mostra o KM GPS, provavelmente está consultando o campo errado.</p>";
    echo "<p><strong>Campos disponíveis para KM:</strong></p>";
    echo "<ul>";
    foreach ($camposKm as $campo) {
        echo "<li><code>{$campo['Field']}</code></li>";
    }
    echo "</ul>";
    echo "<p><strong>O dashboard deve mostrar:</strong> <code>km_gps_final</code> ou calcular a diferença entre coordenadas.</p>";
    echo "</div>";
    
    echo "<h2>🧪 TESTE RÁPIDO:</h2>";
    echo "<p><a href='?teste_calculo=1' style='background: blue; color: white; padding: 10px; text-decoration: none;'>🔬 TESTAR CÁLCULO DE DISTÂNCIA GPS</a></p>";
    
    if (isset($_GET['teste_calculo'])) {
        echo "<h3>📐 Teste de Cálculo de Distância GPS</h3>";
        
        // Pegar uma viagem com coordenadas inicial e final
        $stmt = $pdo->query("
            SELECT id, cliente, latitude_inicial, longitude_inicial, latitude_final, longitude_final, km_gps_final
            FROM viagens 
            WHERE latitude_inicial IS NOT NULL AND latitude_final IS NOT NULL 
            AND data_fim IS NOT NULL
            ORDER BY data_fim DESC 
            LIMIT 1
        ");
        $viagem = $stmt->fetch();
        
        if ($viagem) {
            // Calcular distância usando fórmula de Haversine
            $lat1 = deg2rad($viagem['latitude_inicial']);
            $lon1 = deg2rad($viagem['longitude_inicial']);
            $lat2 = deg2rad($viagem['latitude_final']);
            $lon2 = deg2rad($viagem['longitude_final']);
            
            $dlat = $lat2 - $lat1;
            $dlon = $lon2 - $lon1;
            
            $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_km = 6371 * $c; // Raio da Terra em km
            
            echo "<div style='background: #f8f9fa; padding: 15px; border-radius: 5px; font-family: monospace;'>";
            echo "<strong>Viagem #{$viagem['id']} - {$viagem['cliente']}</strong><br>";
            echo "Coordenadas inicial: {$viagem['latitude_inicial']}, {$viagem['longitude_inicial']}<br>";
            echo "Coordenadas final: {$viagem['latitude_final']}, {$viagem['longitude_final']}<br>";
            echo "<strong>Distância calculada (linha reta): " . round($distancia_km, 2) . " km</strong><br>";
            echo "KM GPS salvo no banco: " . ($viagem['km_gps_final'] ?: 'NULL') . "<br>";
            
            if ($viagem['km_gps_final']) {
                $diferenca = abs($distancia_km - $viagem['km_gps_final']);
                echo "Diferença: " . round($diferenca, 2) . " km<br>";
                
                if ($diferenca < 0.5) {
                    echo "<span style='color: green;'>✅ Valores próximos - GPS OK</span>";
                } else {
                    echo "<span style='color: red;'>❌ Diferença significativa - Problema no cálculo</span>";
                }
            }
            echo "</div>";
        }
    }
    
} catch (Exception $e) {
    echo "<h1 style='color: red;'>ERRO: " . $e->getMessage() . "</h1>";
}
?> 
