<?php
require_once 'conexao.php';

echo "<h2>📊 Comparação de KM: Inicial vs Final vs GPS</h2>";

try {
    // Buscar todas as viagens com dados completos
    $sqlViagens = "SELECT v.*, rv.solicitacao_rota_id, sr.id as rota_id
                   FROM viagens v 
                   INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                   INNER JOIN solicitacoes_rotas sr ON rv.solicitacao_rota_id = sr.id
                   WHERE v.km_inicial IS NOT NULL 
                   AND v.km_final IS NOT NULL 
                   ORDER BY v.data_inicio DESC";
    
    $stmt = $pdo->prepare($sqlViagens);
    $stmt->execute();
    $viagens = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    echo "<h3>Análise de Viagens:</h3>";
    echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
    echo "<tr style='background-color: #f0f0f0;'>";
    echo "<th>Rota</th><th>Viagem ID</th><th>Cliente</th><th>KM Inicial</th><th>KM Final</th><th>KM Manual</th>";
    echo "<th>KM GPS (km/m)</th><th>Diferença</th><th>Status</th><th>Observações</th>";
    echo "</tr>";
    
    foreach ($viagens as $viagem) {
        $kmInicial = floatval($viagem['km_inicial']);
        $kmFinal = floatval($viagem['km_final']);
        $kmGpsMetros = floatval($viagem['km_gps_final'] ?: 0);
        $kmGps = $kmGpsMetros / 1000; // Converter metros para quilômetros
        
        // Calcular KM Manual (diferença entre final e inicial)
        $kmManual = $kmFinal - $kmInicial;
        
        // Calcular diferença entre KM Manual e KM GPS
        $diferenca = abs($kmManual - $kmGps);
        
        // Determinar status baseado nas diferenças
        $status = "";
        $statusColor = "";
        $observacoes = [];
        
        // Verificar se KM Manual é válido
        if ($kmManual < 0) {
            $status = "❌ ERRO";
            $statusColor = "red";
            $observacoes[] = "KM Final menor que KM Inicial";
        } elseif ($kmManual == 0) {
            $status = "⚠️ ATENÇÃO";
            $statusColor = "orange";
            $observacoes[] = "KM Manual = 0 (sem movimento)";
        } else {
            $status = "✅ OK";
            $statusColor = "green";
        }
        
        // Verificar divergência entre KM Manual e KM GPS
        if ($kmGps > 0) {
            $percentualDivergencia = ($diferenca / $kmManual) * 100;
            
            if ($percentualDivergencia > 20) {
                $status = "⚠️ DIVERGÊNCIA";
                $statusColor = "orange";
                $observacoes[] = "Divergência GPS: " . number_format($percentualDivergencia, 1) . "%";
            } elseif ($percentualDivergencia > 10) {
                $status = "⚠️ PEQUENA DIVERGÊNCIA";
                $statusColor = "orange";
                $observacoes[] = "Divergência GPS: " . number_format($percentualDivergencia, 1) . "%";
            }
        } else {
            $observacoes[] = "Sem dados GPS";
        }
        
        // Verificar se há pontos GPS válidos
        $trajeto = $viagem['trajeto'];
        $pontosGpsValidos = 0;
        if ($trajeto) {
            $pontos = json_decode($trajeto, true);
            if ($pontos) {
                foreach ($pontos as $ponto) {
                    if (isset($ponto[0], $ponto[1]) && $ponto[0] != 0 && $ponto[1] != 0) {
                        $pontosGpsValidos++;
                    }
                }
            }
        }
        
        if ($pontosGpsValidos == 0) {
            $observacoes[] = "Sem pontos GPS válidos";
        } else {
            $observacoes[] = "$pontosGpsValidos pontos GPS válidos";
        }
        
        echo "<tr>";
        echo "<td>#{$viagem['rota_id']}</td>";
        echo "<td>{$viagem['id']}</td>";
        echo "<td>{$viagem['cliente']}</td>";
        echo "<td>" . number_format($kmInicial, 1) . "</td>";
        echo "<td>" . number_format($kmFinal, 1) . "</td>";
        echo "<td><strong>" . number_format($kmManual, 1) . "</strong></td>";
        echo "<td>" . number_format($kmGps, 3) . " km (" . number_format($kmGpsMetros, 0) . " m)</td>";
        echo "<td>" . number_format($diferenca, 1) . "</td>";
        echo "<td style='color: $statusColor; font-weight: bold;'>$status</td>";
        echo "<td>" . implode("; ", $observacoes) . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // Estatísticas gerais
    echo "<h3>📈 Estatísticas Gerais:</h3>";
    
    $totalViagens = count($viagens);
    $viagensComGps = 0;
    $viagensComDivergencia = 0;
    $viagensComErro = 0;
    $somaKmManual = 0;
    $somaKmGps = 0;
    
    foreach ($viagens as $viagem) {
        $kmInicial = floatval($viagem['km_inicial']);
        $kmFinal = floatval($viagem['km_final']);
        $kmGpsMetros = floatval($viagem['km_gps_final'] ?: 0);
        $kmGps = $kmGpsMetros / 1000; // Converter metros para quilômetros
        $kmManual = $kmFinal - $kmInicial;
        
        $somaKmManual += $kmManual;
        
        if ($kmGps > 0) {
            $viagensComGps++;
            $somaKmGps += $kmGps; // Já convertido para km
            
            $diferenca = abs($kmManual - $kmGps);
            $percentualDivergencia = ($diferenca / $kmManual) * 100;
            
            if ($percentualDivergencia > 10) {
                $viagensComDivergencia++;
            }
        }
        
        if ($kmManual < 0) {
            $viagensComErro++;
        }
    }
    
    echo "<div style='background-color: #f9f9f9; padding: 15px; border-radius: 5px;'>";
    echo "<p><strong>Total de viagens:</strong> $totalViagens</p>";
    echo "<p><strong>Viagens com GPS:</strong> $viagensComGps (" . round(($viagensComGps/$totalViagens)*100, 1) . "%)</p>";
    echo "<p><strong>Viagens com divergência > 10%:</strong> $viagensComDivergencia</p>";
    echo "<p><strong>Viagens com erro (KM negativo):</strong> $viagensComErro</p>";
    echo "<p><strong>Total KM Manual:</strong> " . number_format($somaKmManual, 1) . " km</p>";
    echo "<p><strong>Total KM GPS:</strong> " . number_format($somaKmGps, 1) . " km</p>";
    
    if ($somaKmManual > 0 && $somaKmGps > 0) {
        $divergenciaTotal = abs($somaKmManual - $somaKmGps);
        $percentualTotal = ($divergenciaTotal / $somaKmManual) * 100;
        echo "<p><strong>Divergência total:</strong> " . number_format($divergenciaTotal, 1) . " km (" . number_format($percentualTotal, 1) . "%)</p>";
    }
    echo "</div>";
    
    // Recomendações
    echo "<h3>💡 Recomendações:</h3>";
    echo "<ul>";
    echo "<li><strong>Para viagens sem GPS:</strong> Verificar se o GPS está ativo no app</li>";
    echo "<li><strong>Para divergências > 20%:</strong> Verificar precisão do odômetro ou pontos GPS</li>";
    echo "<li><strong>Para KM Manual = 0:</strong> Verificar se o veículo realmente se moveu</li>";
    echo "<li><strong>Para KM negativo:</strong> Verificar se os valores foram digitados corretamente</li>";
    echo "</ul>";
    
} catch (Exception $e) {
    echo "<h3 style='color: red;'>❌ Erro: " . $e->getMessage() . "</h3>";
}
?>
