<?php
require_once 'conexao.php';

echo "<h1>🔧 CORRIGINDO CÁLCULO GPS - ROTA #50</h1>\n";

try {
    $pdo = conectarBanco();
    
    // 1. Verificar viagens da rota 50
    echo "<h2>1. Viagens da Rota #50</h2>\n";
    $sql = "SELECT rv.*, v.* FROM rota_viagens rv 
            INNER JOIN viagens v ON rv.viagem_id = v.id 
            WHERE rv.solicitacao_rota_id = 50 
            ORDER BY rv.ordem_execucao";
    $stmt = $pdo->query($sql);
    $viagens = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (!$viagens) {
        echo "<p><strong>❌ Nenhuma viagem encontrada para a rota 50!</strong></p>\n";
        exit;
    }
    
    echo "<p><strong>✅ Encontradas " . count($viagens) . " viagens</strong></p>\n";
    
    // 2. Calcular distância real baseada no trajeto GPS
    echo "<h2>2. Calculando Distância Real do GPS</h2>\n";
    
    $totalDistanciaReal = 0;
    $viagensCorrigidas = 0;
    
    foreach ($viagens as $viagem) {
        echo "<h3>Viagem ID: {$viagem['viagem_id']} - {$viagem['cliente']}</h3>\n";
        
        if ($viagem['trajeto']) {
            $trajeto = json_decode($viagem['trajeto'], true);
            
            if (is_array($trajeto) && count($trajeto) > 1) {
                // Calcular distância real usando Haversine
                $distanciaReal = 0;
                for ($i = 0; $i < count($trajeto) - 1; $i++) {
                    $ponto1 = $trajeto[$i];
                    $ponto2 = $trajeto[$i + 1];
                    
                    $lat1 = $ponto1['latitude'];
                    $lon1 = $ponto1['longitude'];
                    $lat2 = $ponto2['latitude'];
                    $lon2 = $ponto2['longitude'];
                    
                    // Fórmula de Haversine
                    $R = 6371; // Raio da Terra em km
                    $dLat = deg2rad($lat2 - $lat1);
                    $dLon = deg2rad($lon2 - $lon1);
                    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
                    $c = 2 * atan2(sqrt($a), sqrt(1-$a));
                    $distancia = $R * $c;
                    
                    $distanciaReal += $distancia;
                }
                
                $distanciaRealMetros = $distanciaReal * 1000; // Converter para metros
                $totalDistanciaReal += $distanciaRealMetros;
                
                echo "<p><strong>📍 Distância calculada:</strong> " . number_format($distanciaReal, 3) . " km (" . number_format($distanciaRealMetros) . " metros)</p>\n";
                echo "<p><strong>📍 Pontos GPS:</strong> " . count($trajeto) . " pontos</p>\n";
                
                // Verificar se precisa corrigir
                $kmGpsAtual = $viagem['km_gps_final'] ?? 0;
                $diferenca = abs($distanciaRealMetros - $kmGpsAtual);
                
                if ($diferenca > 100) { // Se diferença > 100 metros
                    echo "<p><strong>🔄 Corrigindo...</strong></p>\n";
                    
                    // Atualizar km_gps_final
                    $sqlUpdate = "UPDATE viagens SET km_gps_final = ? WHERE id = ?";
                    $stmtUpdate = $pdo->prepare($sqlUpdate);
                    $resultado = $stmtUpdate->execute([$distanciaRealMetros, $viagem['viagem_id']]);
                    
                    if ($resultado) {
                        echo "<p><strong>✅ Corrigido!</strong> De " . number_format($kmGpsAtual) . " para " . number_format($distanciaRealMetros) . " metros</p>\n";
                        $viagensCorrigidas++;
                    } else {
                        echo "<p><strong>❌ Erro ao corrigir!</strong></p>\n";
                    }
                } else {
                    echo "<p><strong>✅ Já está correto!</strong> Diferença de apenas " . number_format($diferenca) . " metros</p>\n";
                }
                
            } else {
                echo "<p><strong>❌ Trajeto inválido ou insuficiente!</strong></p>\n";
            }
        } else {
            echo "<p><strong>❌ Nenhum trajeto salvo!</strong></p>\n";
        }
    }
    
    // 3. Atualizar KM real da rota
    echo "<h2>3. Atualizando KM Real da Rota</h2>\n";
    
    if ($totalDistanciaReal > 0) {
        $kmRealRota = $totalDistanciaReal / 1000; // Converter para km
        
        $sqlUpdateRota = "UPDATE solicitacoes_rotas SET km_real = ? WHERE id = 50";
        $stmtUpdateRota = $pdo->prepare($sqlUpdateRota);
        $resultadoRota = $stmtUpdateRota->execute([$kmRealRota]);
        
        if ($resultadoRota) {
            echo "<p><strong>✅ KM Real da rota atualizado!</strong> " . number_format($kmRealRota, 3) . " km</p>\n";
        } else {
            echo "<p><strong>❌ Erro ao atualizar KM real da rota!</strong></p>\n";
        }
    }
    
    // 4. Resumo final
    echo "<h2>4. 📊 RESUMO DA CORREÇÃO</h2>\n";
    echo "<ul>\n";
    echo "<li><strong>Total de viagens:</strong> " . count($viagens) . "</li>\n";
    echo "<li><strong>Viagens corrigidas:</strong> $viagensCorrigidas</li>\n";
    echo "<li><strong>Distância total real:</strong> " . number_format($totalDistanciaReal / 1000, 3) . " km</li>\n";
    echo "<li><strong>Distância total real:</strong> " . number_format($totalDistanciaReal) . " metros</li>\n";
    echo "</ul>\n";
    
    if ($viagensCorrigidas > 0) {
        echo "<p><strong>🎉 CORREÇÃO CONCLUÍDA COM SUCESSO!</strong></p>\n";
        echo "<p>Agora o dashboard deve mostrar a distância GPS correta.</p>\n";
    } else {
        echo "<p><strong>ℹ️ Nenhuma correção necessária.</strong></p>\n";
    }
    
} catch (Exception $e) {
    echo "<p><strong>❌ Erro:</strong> " . $e->getMessage() . "</p>\n";
}
?>
