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

echo "<h1>🔧 Corrigir Viagem ID 262</h1>";

try {
    $pdo = conectarBanco();
    
    // 1. Verificar dados atuais da viagem 262
    echo "<h2>📋 Dados Atuais da Viagem ID 262</h2>";
    $sql = "SELECT * FROM viagens WHERE id = 262";
    $stmt = $pdo->query($sql);
    $viagem = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($viagem) {
        echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
        echo "<tr><th>Campo</th><th>Valor Atual</th><th>Status</th></tr>";
        
        $camposGPS = ['km_gps_final', 'latitude_inicial', 'longitude_inicial', 'latitude_final', 'longitude_final'];
        
        foreach ($viagem as $campo => $valor) {
            $status = '';
            $cor = '';
            
            if (in_array($campo, $camposGPS)) {
                if ($valor === null || $valor == '0' || $valor == '0.00000000') {
                    $status = '❌ PROBLEMA';
                    $cor = 'background-color: #ffe6e6;';
                } else {
                    $status = '✅ OK';
                    $cor = 'background-color: #e8f5e8;';
                }
            }
            
            echo "<tr style='$cor'>";
            echo "<td><strong>$campo</strong></td>";
            echo "<td>" . ($valor ?: 'NULL') . "</td>";
            echo "<td>$status</td>";
            echo "</tr>";
        }
        echo "</table>";
    } else {
        echo "<p>❌ Viagem ID 262 não encontrada!</p>";
        exit;
    }
    
    // 2. Verificar pontos GPS na rastreamento_tempo_real
    echo "<h2>📍 Pontos GPS na rastreamento_tempo_real</h2>";
    $sql = "SELECT COUNT(*) as total FROM rastreamento_tempo_real WHERE viagem_id = 262";
    $stmt = $pdo->query($sql);
    $total = $stmt->fetch(PDO::FETCH_ASSOC)['total'];
    
    echo "<p><strong>Total de pontos GPS para viagem 262:</strong> $total</p>";
    
    if ($total > 0) {
        $sql = "SELECT * FROM rastreamento_tempo_real WHERE viagem_id = 262 ORDER BY timestamp ASC";
        $stmt = $pdo->query($sql);
        $pontos = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        echo "<h3>Pontos GPS encontrados:</h3>";
        echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
        echo "<tr><th>ID</th><th>Latitude</th><th>Longitude</th><th>Velocidade</th><th>Timestamp</th></tr>";
        
        foreach ($pontos as $ponto) {
            echo "<tr>";
            echo "<td>{$ponto['id']}</td>";
            echo "<td>{$ponto['latitude']}</td>";
            echo "<td>{$ponto['longitude']}</td>";
            echo "<td>{$ponto['velocidade']} km/h</td>";
            echo "<td>{$ponto['timestamp']}</td>";
            echo "</tr>";
        }
        echo "</table>";
        
        // 3. Calcular km_gps_final baseado nos pontos
        if (count($pontos) > 1) {
            $distanciaTotal = 0;
            for ($i = 0; $i < count($pontos) - 1; $i++) {
                $lat1 = $pontos[$i]['latitude'];
                $lon1 = $pontos[$i]['longitude'];
                $lat2 = $pontos[$i + 1]['latitude'];
                $lon2 = $pontos[$i + 1]['longitude'];
                
                $distancia = haversine($lat1, $lon1, $lat2, $lon2);
                $distanciaTotal += $distancia;
            }
            
            echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px; margin: 10px 0;'>";
            echo "<h3>📊 Cálculo da Distância GPS:</h3>";
            echo "<p><strong>Distância total calculada:</strong> " . number_format($distanciaTotal, 3) . " km</p>";
            echo "<p><strong>Baseado em:</strong> " . count($pontos) . " pontos GPS</p>";
            echo "</div>";
            
            // 4. Corrigir a viagem com os dados calculados
            echo "<h2>🔧 Corrigindo Viagem ID 262</h2>";
            
            $primeiroPonto = $pontos[0];
            $ultimoPonto = end($pontos);
            
            $sql = "UPDATE viagens SET 
                km_gps_final = ?,
                latitude_inicial = ?,
                longitude_inicial = ?,
                latitude_final = ?,
                longitude_final = ?
                WHERE id = 262";
            
            $stmt = $pdo->prepare($sql);
            $resultado = $stmt->execute([
                $distanciaTotal,
                $primeiroPonto['latitude'],
                $primeiroPonto['longitude'],
                $ultimoPonto['latitude'],
                $ultimoPonto['longitude']
            ]);
            
            if ($resultado) {
                echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px;'>";
                echo "<h3>✅ VIAGEM CORRIGIDA COM SUCESSO!</h3>";
                echo "<p><strong>km_gps_final:</strong> " . number_format($distanciaTotal, 3) . " km</p>";
                echo "<p><strong>latitude_inicial:</strong> {$primeiroPonto['latitude']}</p>";
                echo "<p><strong>longitude_inicial:</strong> {$primeiroPonto['longitude']}</p>";
                echo "<p><strong>latitude_final:</strong> {$ultimoPonto['latitude']}</p>";
                echo "<p><strong>longitude_final:</strong> {$ultimoPonto['longitude']}</p>";
                echo "</div>";
            } else {
                echo "<div style='background: #ffe6e6; padding: 15px; border-radius: 5px;'>";
                echo "<h3>❌ ERRO AO CORRIGIR VIAGEM!</h3>";
                echo "<p>Não foi possível atualizar os dados da viagem.</p>";
                echo "</div>";
            }
            
        } else {
            echo "<div style='background: #fff3cd; padding: 15px; border-radius: 5px;'>";
            echo "<h3>⚠️ PONTOS GPS INSUFICIENTES!</h3>";
            echo "<p>Há apenas " . count($pontos) . " ponto(s) GPS. São necessários pelo menos 2 pontos para calcular a distância.</p>";
            echo "</div>";
        }
        
    } else {
        echo "<div style='background: #ffe6e6; padding: 15px; border-radius: 5px;'>";
        echo "<h3>❌ NENHUM PONTO GPS ENCONTRADO!</h3>";
        echo "<p>A viagem ID 262 não tem pontos GPS salvos na tabela rastreamento_tempo_real.</p>";
        echo "<p><strong>Possíveis causas:</strong></p>";
        echo "<ul>";
        echo "<li>O app Android não está enviando dados para o servidor</li>";
        echo "<li>O endpoint atualizar-posicao não está funcionando</li>";
        echo "<li>Problema de conectividade entre app e servidor</li>";
        echo "<li>LocationForegroundService não está ativo</li>";
        echo "</ul>";
        echo "</div>";
    }
    
    // 5. Testar endpoint atualizar-posicao
    echo "<h2>🧪 Teste do Endpoint atualizar-posicao</h2>";
    
    $url = 'https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/api-simples-v2.php?acao=atualizar-posicao';
    $data = [
        'viagem_id' => '262',
        'latitude' => '-10.123456',
        'longitude' => '-48.123456',
        'velocidade' => '25.5',
        'precisao' => '10.0',
        'altitude' => '100.0',
        'battery_level' => '85'
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    echo "<p><strong>HTTP Code:</strong> $httpCode</p>";
    echo "<p><strong>Resposta da API:</strong></p>";
    echo "<pre>" . htmlspecialchars($response) . "</pre>";
    
    // 6. Verificar se o ponto teste foi salvo
    $sql = "SELECT COUNT(*) as total FROM rastreamento_tempo_real WHERE viagem_id = 262";
    $stmt = $pdo->query($sql);
    $totalApos = $stmt->fetch(PDO::FETCH_ASSOC)['total'];
    
    echo "<p><strong>Total de pontos após teste:</strong> $totalApos</p>";
    
    if ($totalApos > $total) {
        echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px;'>";
        echo "<h3>✅ API FUNCIONANDO!</h3>";
        echo "<p>A API atualizar-posicao está salvando pontos corretamente.</p>";
        echo "</div>";
    } else {
        echo "<div style='background: #ffe6e6; padding: 15px; border-radius: 5px;'>";
        echo "<h3>❌ PROBLEMA NA API!</h3>";
        echo "<p>A API atualizar-posicao não está salvando pontos.</p>";
        echo "</div>";
    }
    
} catch (Exception $e) {
    echo "<p>❌ Erro: " . $e->getMessage() . "</p>";
}

// Função Haversine para calcular distância
function haversine($lat1, $lon1, $lat2, $lon2) {
    $R = 6371.0; // Raio da Terra em km
    $dLat = deg2rad($lat2 - $lat1);
    $dLon = deg2rad($lon2 - $lon1);
    $lat1 = deg2rad($lat1);
    $lat2 = deg2rad($lat2);
    
    $a = sin($dLat/2) * sin($dLat/2) + cos($lat1) * cos($lat2) * sin($dLon/2) * sin($dLon/2);
    $c = 2 * atan2(sqrt($a), sqrt(1-$a));
    return $R * $c;
}
?>
