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

echo "<h1>🔧 Calcular GPS Real da Rota (COM FILTRO DE VELOCIDADE)</h1>";
echo "<p>Calculando distância GPS real da rota #1 (apenas pontos em movimento)...</p>";

try {
    // 1. Conexão com banco
    $host = 'localhost';
    $dbname = 'pinheir3_controle_frotasV1.1';
    $username = 'pinheir3_admin';
    $password = '080880Gelboy';
    
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
    
    echo "<p style='color: green;'>✅ Conexão estabelecida</p>";
    
    // 2. Buscar dados da rota #1 (COLUNAS CORRETAS!)
    $stmt = $pdo->prepare("
        SELECT id, titulo, veiculo_id, data_inicio_real, data_fim_real, km_real
        FROM solicitacoes_rotas 
        WHERE id = 1
    ");
    $stmt->execute();
    $rota = $stmt->fetch();
    
    if (!$rota) {
        throw new Exception("Rota #1 não encontrada");
    }
    
    echo "<h2>📋 Dados da Rota</h2>";
    echo "<p><strong>ID:</strong> {$rota['id']}</p>";
    echo "<p><strong>Título:</strong> {$rota['titulo']}</p>";
    echo "<p><strong>Veículo ID:</strong> {$rota['veiculo_id']}</p>";
    echo "<p><strong>Início Real:</strong> {$rota['data_inicio_real']}</p>";
    echo "<p><strong>Fim Real:</strong> {$rota['data_fim_real']}</p>";
    echo "<p><strong>KM Real (Odômetro):</strong> {$rota['km_real']} km</p>";
    
    // 3. Buscar viagens da rota
    $stmt = $pdo->prepare("
        SELECT rv.viagem_id, v.cliente, v.data_inicio, v.data_fim
        FROM rota_viagens rv
        JOIN viagens v ON rv.viagem_id = v.id
        WHERE rv.solicitacao_rota_id = 1
        ORDER BY v.data_inicio
    ");
    $stmt->execute();
    $viagens = $stmt->fetchAll();
    
    echo "<h2>🚗 Viagens da Rota</h2>";
    echo "<p><strong>Total de viagens:</strong> " . count($viagens) . "</p>";
    
    foreach ($viagens as $i => $viagem) {
        echo "<p><strong>Viagem " . ($i + 1) . ":</strong> {$viagem['cliente']} - {$viagem['data_inicio']} até {$viagem['data_fim']}</p>";
    }
    
    // 4. Buscar pontos GPS da rota (COM FILTRO DE VELOCIDADE!)
    echo "<h2>📍 Buscando Pontos GPS (APENAS EM MOVIMENTO)</h2>";
    
    // Primeiro, vamos contar quantos pontos temos para cada viagem (TODOS)
    $totalPontosTodos = 0;
    $totalPontosMovimento = 0;
    
    foreach ($viagens as $viagem) {
        // Contar TODOS os pontos
        $stmt = $pdo->prepare("
            SELECT COUNT(*) as total
            FROM rastreamento_tempo_real
            WHERE viagem_id = ?
        ");
        $stmt->execute([$viagem['viagem_id']]);
        $contagemTodos = $stmt->fetch();
        $totalPontosTodos += $contagemTodos['total'];
        
        // Contar pontos EM MOVIMENTO (velocidade > 0)
        $stmt = $pdo->prepare("
            SELECT COUNT(*) as total
            FROM rastreamento_tempo_real
            WHERE viagem_id = ? AND velocidade > 0
        ");
        $stmt->execute([$viagem['viagem_id']]);
        $contagemMovimento = $stmt->fetch();
        $totalPontosMovimento += $contagemMovimento['total'];
        
        echo "<p><strong>Viagem {$viagem['viagem_id']} ({$viagem['cliente']}):</strong></p>";
        echo "<ul>";
        echo "<li>Total de pontos: {$contagemTodos['total']}</li>";
        echo "<li>Pontos em movimento: {$contagemMovimento['total']}</li>";
        echo "<li>Pontos parados: " . ($contagemTodos['total'] - $contagemMovimento['total']) . "</li>";
        echo "</ul>";
    }
    
    echo "<h3>📊 RESUMO DOS PONTOS:</h3>";
    echo "<p><strong>Total de pontos GPS (TODOS):</strong> {$totalPontosTodos}</p>";
    echo "<p><strong>Total de pontos GPS (EM MOVIMENTO):</strong> {$totalPontosMovimento}</p>";
    echo "<p><strong>Total de pontos GPS (PARADOS):</strong> " . ($totalPontosTodos - $totalPontosMovimento) . "</p>";
    
    if ($totalPontosMovimento < 2) {
        echo "<p style='color: orange;'>⚠️ Poucos pontos GPS em movimento para calcular distância</p>";
        return;
    }
    
    // 5. Calcular distância total ponto a ponto (APENAS PONTOS EM MOVIMENTO)
    echo "<h2>📏 Calculando Distância GPS (APENAS EM MOVIMENTO)</h2>";
    
    $distanciaTotal = 0;
    $pontosCalculados = 0;
    
    // Para cada viagem, buscar pontos EM MOVIMENTO ordenados por timestamp
    foreach ($viagens as $viagem) {
        $stmt = $pdo->prepare("
            SELECT latitude, longitude, timestamp, velocidade
            FROM rastreamento_tempo_real
            WHERE viagem_id = ? AND velocidade > 0
            ORDER BY timestamp
        ");
        $stmt->execute([$viagem['viagem_id']]);
        $pontos = $stmt->fetchAll();
        
        if (count($pontos) > 1) {
            echo "<p><strong>Calculando viagem {$viagem['viagem_id']} ({$viagem['cliente']}):</strong> " . count($pontos) . " pontos em movimento</p>";
            
            for ($i = 0; $i < count($pontos) - 1; $i++) {
                $ponto1 = $pontos[$i];
                $ponto2 = $pontos[$i + 1];
                
                // Verificar se tem coordenadas válidas
                if ($ponto1['latitude'] && $ponto1['longitude'] && 
                    $ponto2['latitude'] && $ponto2['longitude']) {
                    
                    $distancia = calcularDistancia(
                        $ponto1['latitude'], $ponto1['longitude'],
                        $ponto2['latitude'], $ponto2['longitude']
                    );
                    
                    $distanciaTotal += $distancia;
                    $pontosCalculados++;
                }
            }
        }
    }
    
    echo "<h2>📊 Resultado do Cálculo (COM FILTRO DE VELOCIDADE)</h2>";
    echo "<p><strong>Pontos calculados (em movimento):</strong> {$pontosCalculados}</p>";
    echo "<p><strong>Distância total GPS (em movimento):</strong> <span style='color: blue; font-size: 18px; font-weight: bold;'>" . number_format($distanciaTotal, 2) . " km</span></p>";
    
    // 6. Comparar com odômetro
    $kmReal = $rota['km_real']; // Usar valor real da rota
    $diferenca = abs($distanciaTotal - $kmReal);
    $percentual = ($diferenca / $kmReal) * 100;
    
    echo "<h2>📊 Comparação com Odômetro</h2>";
    echo "<p><strong>Odômetro:</strong> {$kmReal} km</p>";
    echo "<p><strong>GPS Calculado (em movimento):</strong> " . number_format($distanciaTotal, 2) . " km</p>";
    echo "<p><strong>Diferença:</strong> " . number_format($diferenca, 2) . " km</p>";
    echo "<p><strong>Percentual:</strong> " . number_format($percentual, 1) . "%</p>";
    
    if ($percentual < 5) {
        echo "<p style='color: green;'>✅ Diferença aceitável (< 5%)</p>";
    } elseif ($percentual < 15) {
        echo "<p style='color: orange;'>⚠️ Diferença moderada (5-15%)</p>";
    } else {
        echo "<p style='color: red;'>❌ Diferença significativa (> 15%)</p>";
    }
    
    // 7. Mostrar estatísticas por viagem (com filtro de velocidade)
    echo "<h2>🔍 Estatísticas por Viagem (EM MOVIMENTO)</h2>";
    foreach ($viagens as $viagem) {
        $stmt = $pdo->prepare("
            SELECT 
                MIN(timestamp) as primeiro_ponto,
                MAX(timestamp) as ultimo_ponto,
                COUNT(*) as total_pontos,
                AVG(velocidade) as velocidade_media
            FROM rastreamento_tempo_real
            WHERE viagem_id = ? AND velocidade > 0
        ");
        $stmt->execute([$viagem['viagem_id']]);
        $stats = $stmt->fetch();
        
        echo "<p><strong>Viagem {$viagem['viagem_id']} ({$viagem['cliente']}):</strong></p>";
        echo "<ul>";
        echo "<li>Primeiro ponto: {$stats['primeiro_ponto']}</li>";
        echo "<li>Último ponto: {$stats['ultimo_ponto']}</li>";
        echo "<li>Total de pontos (em movimento): {$stats['total_pontos']}</li>";
        echo "<li>Velocidade média: " . number_format($stats['velocidade_media'], 1) . " km/h</li>";
        echo "</ul>";
    }
    
    // 8. Análise da diferença
    echo "<h2>🔍 Análise da Diferença</h2>";
    echo "<p><strong>Problema identificado:</strong> GPS coletando pontos parados (dentro da loja do cliente)</p>";
    echo "<p><strong>Solução aplicada:</strong> Filtro por velocidade > 0 (apenas pontos em movimento)</p>";
    echo "<p><strong>Resultado:</strong> Distância mais precisa, excluindo pontos parados</p>";
    
} catch (Exception $e) {
    echo "<p style='color: red;'>❌ Erro: " . $e->getMessage() . "</p>";
    echo "<p><strong>Linha:</strong> " . $e->getLine() . "</p>";
    echo "<p><strong>Arquivo:</strong> " . $e->getFile() . "</p>";
}

// Função para calcular distância entre dois pontos (Fórmula de Haversine)
function calcularDistancia($lat1, $lon1, $lat2, $lon2) {
    $raioTerra = 6371; // Raio da Terra em km
    
    $lat1 = deg2rad($lat1);
    $lon1 = deg2rad($lon1);
    $lat2 = deg2rad($lat2);
    $lon2 = deg2rad($lon2);
    
    $deltaLat = $lat2 - $lat1;
    $deltaLon = $lon2 - $lon1;
    
    $a = sin($deltaLat/2) * sin($deltaLat/2) +
         cos($lat1) * cos($lat2) *
         sin($deltaLon/2) * sin($deltaLon/2);
    
    $c = 2 * atan2(sqrt($a), sqrt(1-$a));
    
    return $raioTerra * $c;
}

echo "<hr>";
echo "<h2>🎉 CÁLCULO CONCLUÍDO!</h2>";
echo "<p>Script executado com sucesso com filtro de velocidade!</p>";
?>
