<?php
require_once 'conexao.php';

// Configurar headers para evitar cache
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-cache, no-store, must-revalidate');

echo "<!DOCTYPE html>";
echo "<html>";
echo "<head>";
echo "<meta charset='utf-8'>";
echo "<title>Corrigir GPS Rota #50</title>";
echo "<style>";
echo "body { font-family: Arial, sans-serif; margin: 20px; background-color: #f5f5f5; }";
echo ".container { max-width: 800px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }";
echo ".success { color: #28a745; font-weight: bold; }";
echo ".error { color: #dc3545; font-weight: bold; }";
echo ".warning { color: #ffc107; font-weight: bold; }";
echo ".info { color: #17a2b8; font-weight: bold; }";
echo "h1 { color: #333; border-bottom: 2px solid #007bff; padding-bottom: 10px; }";
echo "h2 { color: #555; margin-top: 30px; }";
echo "ul { background: #f8f9fa; padding: 15px; border-radius: 5px; }";
echo "li { margin: 5px 0; }";
echo ".btn { background: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; text-decoration: none; display: inline-block; margin: 10px 5px; }";
echo ".btn:hover { background: #0056b3; }";
echo "</style>";
echo "</head>";
echo "<body>";

echo "<div class='container'>";
echo "<h1>🔧 CORRIGINDO CÁLCULO GPS - ROTA #50</h1>";

try {
    $pdo = conectarBanco();
    
    // 1. Verificar viagens da rota 50
    echo "<h2>1. Viagens da Rota #50</h2>";
    $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 class='error'>❌ Nenhuma viagem encontrada para a rota 50!</p>";
        echo "<p><a href='javascript:history.back()' class='btn'>Voltar</a></p>";
        echo "</div></body></html>";
        exit;
    }
    
    echo "<p class='success'>✅ Encontradas " . count($viagens) . " viagens</p>";
    
    // 2. Calcular distância real baseada no trajeto GPS
    echo "<h2>2. Calculando Distância Real do GPS</h2>";
    
    $totalDistanciaReal = 0;
    $viagensCorrigidas = 0;
    $detalhesCorrecoes = [];
    
    foreach ($viagens as $viagem) {
        echo "<h3>Viagem ID: {$viagem['viagem_id']} - {$viagem['cliente']}</h3>";
        
        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 class='info'>📍 Distância calculada: " . number_format($distanciaReal, 3) . " km (" . number_format($distanciaRealMetros) . " metros)</p>";
                echo "<p class='info'>📍 Pontos GPS: " . count($trajeto) . " pontos</p>";
                
                // Verificar se precisa corrigir
                $kmGpsAtual = $viagem['km_gps_final'] ?? 0;
                $diferenca = abs($distanciaRealMetros - $kmGpsAtual);
                
                if ($diferenca > 100) { // Se diferença > 100 metros
                    echo "<p class='warning'>🔄 Corrigindo...</p>";
                    
                    // 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 class='success'>✅ Corrigido! De " . number_format($kmGpsAtual) . " para " . number_format($distanciaRealMetros) . " metros</p>";
                        $viagensCorrigidas++;
                        
                        $detalhesCorrecoes[] = [
                            'viagem_id' => $viagem['viagem_id'],
                            'cliente' => $viagem['cliente'],
                            'antes' => $kmGpsAtual,
                            'depois' => $distanciaRealMetros,
                            'diferenca' => $distanciaRealMetros - $kmGpsAtual
                        ];
                    } else {
                        echo "<p class='error'>❌ Erro ao corrigir!</p>";
                    }
                } else {
                    echo "<p class='success'>✅ Já está correto! Diferença de apenas " . number_format($diferenca) . " metros</p>";
                }
                
            } else {
                echo "<p class='error'>❌ Trajeto inválido ou insuficiente!</p>";
            }
        } else {
            echo "<p class='error'>❌ Nenhum trajeto salvo!</p>";
        }
    }
    
    // 3. Atualizar KM real da rota
    echo "<h2>3. Atualizando KM Real da Rota</h2>";
    
    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 class='success'>✅ KM Real da rota atualizado! " . number_format($kmRealRota, 3) . " km</p>";
        } else {
            echo "<p class='error'>❌ Erro ao atualizar KM real da rota!</p>";
        }
    }
    
    // 4. Resumo final
    echo "<h2>4. 📊 RESUMO DA CORREÇÃO</h2>";
    echo "<ul>";
    echo "<li><strong>Total de viagens:</strong> " . count($viagens) . "</li>";
    echo "<li><strong>Viagens corrigidas:</strong> $viagensCorrigidas</li>";
    echo "<li><strong>Distância total real:</strong> " . number_format($totalDistanciaReal / 1000, 3) . " km</li>";
    echo "<li><strong>Distância total real:</strong> " . number_format($totalDistanciaReal) . " metros</li>";
    echo "</ul>";
    
    if ($viagensCorrigidas > 0) {
        echo "<h3>🔧 Detalhes das Correções:</h3>";
        echo "<ul>";
        foreach ($detalhesCorrecoes as $correcao) {
            echo "<li>Viagem {$correcao['viagem_id']} ({$correcao['cliente']}): " . 
                 number_format($correcao['antes']) . " → " . number_format($correcao['depois']) . " metros " .
                 "(" . ($correcao['diferenca'] > 0 ? "+" : "") . number_format($correcao['diferenca']) . " metros)</li>";
        }
        echo "</ul>";
        
        echo "<p class='success'>🎉 CORREÇÃO CONCLUÍDA COM SUCESSO!</p>";
        echo "<p>Agora o dashboard deve mostrar a distância GPS correta.</p>";
    } else {
        echo "<p class='info'>ℹ️ Nenhuma correção necessária.</p>";
    }
    
    echo "<p><a href='javascript:history.back()' class='btn'>Voltar</a></p>";
    
} catch (Exception $e) {
    echo "<p class='error'>❌ Erro: " . htmlspecialchars($e->getMessage()) . "</p>";
    echo "<p><a href='javascript:history.back()' class='btn'>Voltar</a></p>";
}

echo "</div>";
echo "</body>";
echo "</html>";
?>
