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

header('Content-Type: text/html; charset=utf-8');
echo "<!DOCTYPE html><html><head><title>Corrigir Viagens KM GPS = 0</title></head><body>";
echo "<h2>🔧 CORREÇÃO: Viagens com KM GPS = 0</h2>";

try {
    $pdo = conectarBanco();
    
    // 1. BUSCAR VIAGENS PROBLEMÁTICAS
    echo "<h3>1. Identificando viagens problemáticas:</h3>";
    $stmt = $pdo->prepare("
        SELECT 
            id, cliente, data_inicio, data_fim,
            latitude_inicial, longitude_inicial,
            latitude_final, longitude_final,
            km_gps_final
        FROM viagens 
        WHERE data_fim IS NOT NULL 
        AND latitude_inicial IS NOT NULL 
        AND longitude_inicial IS NOT NULL
        AND latitude_final IS NOT NULL 
        AND longitude_final IS NOT NULL
        AND (km_gps_final IS NULL OR km_gps_final = 0)
        ORDER BY id DESC 
        LIMIT 10
    ");
    $stmt->execute();
    $viagens = $stmt->fetchAll();
    
    if (empty($viagens)) {
        echo "<p>✅ <strong>Nenhuma viagem problemática encontrada!</strong></p>";
        echo "<p>Todas as viagens com coordenadas já têm KM GPS calculado.</p>";
        exit;
    }
    
    echo "<p>❌ Encontradas <strong>" . count($viagens) . " viagens</strong> com coordenadas mas KM GPS = 0</p>";
    
    // Fórmula Haversine
    function haversine($lat1, $lon1, $lat2, $lon2) {
        $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));
        return $R * $c;
    }
    
    // 2. MOSTRAR VIAGENS E CALCULAR CORREÇÕES
    echo "<h3>2. Viagens a serem corrigidas:</h3>";
    echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
    echo "<tr style='background: #f0f0f0;'>";
    echo "<th>ID</th><th>Cliente</th><th>Data</th><th>KM GPS Atual</th><th>KM GPS Calculado</th><th>Status</th>";
    echo "</tr>";
    
    $viagensParaCorrigir = [];
    
    foreach ($viagens as $viagem) {
        $distancia = haversine(
            $viagem['latitude_inicial'], 
            $viagem['longitude_inicial'],
            $viagem['latitude_final'], 
            $viagem['longitude_final']
        );
        
        $viagensParaCorrigir[] = [
            'id' => $viagem['id'],
            'distancia' => round($distancia, 2)
        ];
        
        echo "<tr>";
        echo "<td>{$viagem['id']}</td>";
        echo "<td>{$viagem['cliente']}</td>";
        echo "<td>" . date('d/m/Y', strtotime($viagem['data_inicio'])) . "</td>";
        echo "<td>" . ($viagem['km_gps_final'] ?: 'NULL') . "</td>";
        echo "<td><strong>" . number_format($distancia, 2) . " km</strong></td>";
        echo "<td>⏳ Pendente</td>";
        echo "</tr>";
    }
    
    echo "</table>";
    
    // 3. EXECUTAR CORREÇÕES
    echo "<h3>3. Executando correções:</h3>";
    
    $corrigidas = 0;
    $erros = 0;
    
    foreach ($viagensParaCorrigir as $item) {
        try {
            $sql = "UPDATE viagens SET 
                km_gps_final = ?,
                observacoes = CONCAT(
                    COALESCE(observacoes, ''), 
                    ' | KM GPS corrigido automaticamente: ', 
                    ?, 
                    ' km em ', 
                    NOW()
                )
                WHERE id = ?";
            
            $stmt = $pdo->prepare($sql);
            $stmt->execute([$item['distancia'], $item['distancia'], $item['id']]);
            
            if ($stmt->rowCount() > 0) {
                echo "<p>✅ Viagem ID {$item['id']}: <strong>{$item['distancia']} km</strong> - Corrigida!</p>";
                $corrigidas++;
            } else {
                echo "<p>⚠️ Viagem ID {$item['id']}: Nenhuma linha afetada</p>";
                $erros++;
            }
            
        } catch (Exception $e) {
            echo "<p>❌ Viagem ID {$item['id']}: Erro - " . $e->getMessage() . "</p>";
            $erros++;
        }
    }
    
    // 4. RESUMO
    echo "<h3>4. Resumo da correção:</h3>";
    echo "<div style='background: #e8f5e8; padding: 15px; border-radius: 5px;'>";
    echo "<p><strong>✅ Viagens corrigidas:</strong> $corrigidas</p>";
    echo "<p><strong>❌ Erros:</strong> $erros</p>";
    echo "<p><strong>📊 Total processadas:</strong> " . count($viagensParaCorrigir) . "</p>";
    echo "</div>";
    
    if ($corrigidas > 0) {
        echo "<p style='color: green;'><strong>🎉 SUCESSO!</strong> Agora todas as viagens devem mostrar KM GPS correto no dashboard!</p>";
    }
    
    // 5. VERIFICAÇÃO FINAL
    echo "<h3>5. Verificação final:</h3>";
    $stmt = $pdo->prepare("
        SELECT COUNT(*) as total_sem_km_gps
        FROM viagens 
        WHERE data_fim IS NOT NULL 
        AND latitude_inicial IS NOT NULL 
        AND latitude_final IS NOT NULL
        AND (km_gps_final IS NULL OR km_gps_final = 0)
    ");
    $stmt->execute();
    $restantes = $stmt->fetch()['total_sem_km_gps'];
    
    if ($restantes == 0) {
        echo "<p style='color: green;'>✅ <strong>PERFEITO!</strong> Todas as viagens finalizadas agora têm KM GPS calculado!</p>";
    } else {
        echo "<p style='color: orange;'>⚠️ Ainda restam <strong>$restantes viagens</strong> sem KM GPS (pode ser normal se não têm coordenadas)</p>";
    }
    
} catch (Exception $e) {
    echo "<p style='color: red;'>❌ Erro: " . $e->getMessage() . "</p>";
}

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