<?php
require_once 'config/database.php';

echo "<h2>🎯 CORRIGIR QUALIDADE DO TRAJETO</h2>";

try {
    $pdo = conectarBanco();
    
    echo "<h3>🔍 1. Analisando qualidade dos pontos GPS...</h3>";
    
    // Buscar todos os pontos da viagem 169
    $stmt = $pdo->query("
        SELECT id, latitude, longitude, timestamp_gps, precisao
        FROM rastreamento_tempo_real 
        WHERE viagem_id = 169 
        ORDER BY timestamp_gps ASC
    ");
    $pontos = $stmt->fetchAll();
    
    echo "<p>✅ Total de pontos: " . count($pontos) . "</p>";
    
    if (count($pontos) == 0) {
        echo "<p style='color: red;'>❌ Nenhum ponto encontrado</p>";
        exit;
    }
    
    echo "<h3>🧹 2. Aplicando filtros de qualidade...</h3>";
    
    $pontosLimpos = [];
    $removidos = 0;
    $distanciaMaxima = 0.002; // ~200 metros entre pontos consecutivos
    
    // Primeiro ponto sempre inclui
    $pontosLimpos[] = $pontos[0];
    $ultimoPonto = $pontos[0];
    
    for ($i = 1; $i < count($pontos); $i++) {
        $pontoAtual = $pontos[$i];
        
        // Calcular distância do último ponto válido
        $deltaLat = abs($pontoAtual['latitude'] - $ultimoPonto['latitude']);
        $deltaLng = abs($pontoAtual['longitude'] - $ultimoPonto['longitude']);
        $distancia = sqrt($deltaLat * $deltaLat + $deltaLng * $deltaLng);
        
        // Filtros de qualidade
        $pontoValido = true;
        $motivoRemocao = '';
        
        // Filtro 1: Distância muito grande (teleporte)
        if ($distancia > $distanciaMaxima) {
            $pontoValido = false;
            $motivoRemocao = 'Distância muito grande';
        }
        
        // Filtro 2: Coordenadas inválidas
        if ($pontoAtual['latitude'] == 0 || $pontoAtual['longitude'] == 0) {
            $pontoValido = false;
            $motivoRemocao = 'Coordenadas inválidas (0,0)';
        }
        
        // Filtro 3: Muito próximo do anterior (duplicado)
        if ($distancia < 0.00001) { // ~1 metro
            $pontoValido = false;
            $motivoRemocao = 'Muito próximo do anterior';
        }
        
        if ($pontoValido) {
            $pontosLimpos[] = $pontoAtual;
            $ultimoPonto = $pontoAtual;
        } else {
            $removidos++;
            if ($removidos <= 5) {
                echo "<p style='color: orange;'>⚠️ Removido ponto #{$pontoAtual['id']}: $motivoRemocao</p>";
            }
        }
    }
    
    echo "<p>✅ Pontos após filtros: " . count($pontosLimpos) . "</p>";
    echo "<p>🗑️ Pontos removidos: $removidos</p>";
    
    if (count($pontosLimpos) < 3) {
        echo "<p style='color: red;'>❌ Muito poucos pontos restaram após filtros</p>";
        exit;
    }
    
    echo "<h3>🔄 3. Substituindo pontos na tabela...</h3>";
    
    // Limpar tabela
    $pdo->exec("DELETE FROM rastreamento_tempo_real WHERE viagem_id = 169");
    echo "<p>✅ Tabela limpa</p>";
    
    // Inserir pontos filtrados
    $inseridos = 0;
    foreach ($pontosLimpos as $index => $ponto) {
        $stmt = $pdo->prepare("
            INSERT INTO rastreamento_tempo_real (
                tecnico_id, viagem_id, latitude, longitude, velocidade, 
                precisao, altitude, timestamp_gps, is_online
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
        ");
        
        $stmt->execute([
            'Administrador',
            169,
            $ponto['latitude'],
            $ponto['longitude'],
            ($index < count($pontosLimpos) - 1) ? 25 : 0, // Velocidade estimada
            15, // Precisão melhorada
            900,
            $ponto['timestamp_gps'],
            1
        ]);
        
        $inseridos++;
    }
    
    echo "<p>✅ $inseridos pontos limpos inseridos</p>";
    
    echo "<h3>📊 4. Análise do trajeto corrigido...</h3>";
    
    // Calcular estatísticas
    $primeiroP = $pontosLimpos[0];
    $ultimoP = $pontosLimpos[count($pontosLimpos) - 1];
    
    $distanciaTotal = 0;
    for ($i = 0; $i < count($pontosLimpos) - 1; $i++) {
        $p1 = $pontosLimpos[$i];
        $p2 = $pontosLimpos[$i + 1];
        
        $deltaLat = $p2['latitude'] - $p1['latitude'];
        $deltaLng = $p2['longitude'] - $p1['longitude'];
        $distanciaTotal += sqrt($deltaLat * $deltaLat + $deltaLng * $deltaLng);
    }
    
    $distanciaKm = $distanciaTotal * 111; // Conversão aproximada para km
    
    echo "<p><strong>📍 Início:</strong> {$primeiroP['latitude']}, {$primeiroP['longitude']}</p>";
    echo "<p><strong>🏁 Fim:</strong> {$ultimoP['latitude']}, {$ultimoP['longitude']}</p>";
    echo "<p><strong>📏 Distância estimada:</strong> " . round($distanciaKm, 2) . " km</p>";
    echo "<p><strong>⏱️ Duração:</strong> " . (strtotime($ultimoP['timestamp_gps']) - strtotime($primeiroP['timestamp_gps'])) . " segundos</p>";
    
    echo "<div style='background: #d4edda; padding: 15px; border-radius: 5px; margin: 20px 0;'>";
    echo "<h4 style='color: #155724;'>🎉 TRAJETO CORRIGIDO COM SUCESSO!</h4>";
    echo "<ul style='color: #155724;'>";
    echo "<li>✅ <strong>$inseridos pontos GPS</strong> de alta qualidade</li>";
    echo "<li>✅ <strong>$removidos pontos ruins</strong> removidos</li>";
    echo "<li>✅ <strong>Filtros aplicados:</strong> teleporte, duplicados, coordenadas inválidas</li>";
    echo "<li>🗺️ <strong>TRAJETO DEVE ESTAR MAIS PRECISO AGORA!</strong></li>";
    echo "</ul>";
    echo "</div>";
    
} catch (Exception $e) {
    echo "<div style='color: red;'><strong>❌ Erro:</strong> " . $e->getMessage() . "</div>";
}

echo "<hr>";
echo "<h3>🎯 TESTE O RESULTADO:</h3>";
echo "<div style='background: #fff3cd; padding: 15px; border-radius: 5px;'>";
echo "<h4 style='color: #856404;'>📱 AGORA RECARREGUE O MAPA:</h4>";
echo "<ol style='color: #856404;'>";
echo "<li>Recarregue a página da viagem 169</li>";
echo "<li>O trajeto deve estar mais suave e seguindo as ruas</li>";
echo "<li>Menos 'saltos' e linhas cruzadas</li>";
echo "<li>Traçado mais realista do percurso</li>";
echo "</ol>";
echo "</div>";

echo "<div style='background: #d1ecf1; padding: 15px; border-radius: 5px; margin: 20px 0;'>";
echo "<h4 style='color: #0c5460;'>🔧 MELHORIAS APLICADAS:</h4>";
echo "<ul style='color: #0c5460;'>";
echo "<li>✅ <strong>Filtro de teleporte:</strong> Remove saltos > 200m</li>";
echo "<li>✅ <strong>Filtro de duplicados:</strong> Remove pontos muito próximos</li>";
echo "<li>✅ <strong>Filtro de coordenadas:</strong> Remove pontos inválidos (0,0)</li>";
echo "<li>✅ <strong>Ordenação temporal:</strong> Pontos em ordem cronológica</li>";
echo "</ul>";
echo "</div>";
?> 
