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

require_once 'conexao.php';

echo "<!DOCTYPE html>
<html>
<head>
    <title>Calcular KM GPS das Viagens</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .success { color: green; }
        .error { color: red; }
        .warning { color: orange; }
        .info { color: blue; }
        table { border-collapse: collapse; width: 100%; margin: 20px 0; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
        .btn { background-color: #4CAF50; color: white; padding: 10px 20px; text-decoration: none; border-radius: 4px; }
        .btn-danger { background-color: #f44336; }
    </style>
</head>
<body>";

echo "<h1>🧮 Calcular KM GPS das Viagens</h1>";

// Função para calcular distância entre dois pontos (Haversine)
function calcularDistancia($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;
}

try {
    $pdo = conectarBanco();
    
    // Verificar se foi solicitada uma viagem específica
    $viagemId = $_GET['viagem_id'] ?? null;
    
    if ($viagemId) {
        // Calcular KM GPS para uma viagem específica
        echo "<h2>🎯 Calculando KM GPS para Viagem ID: $viagemId</h2>";
        
        $sql = "SELECT id, cliente, trajeto, km_inicial, km_final, km_gps_final, data_inicio, data_fim 
                FROM viagens WHERE id = ?";
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$viagemId]);
        $viagem = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$viagem) {
            echo "<p class='error'>❌ Viagem ID $viagemId não encontrada!</p>";
            exit;
        }
        
        echo "<h3>📋 Dados da Viagem</h3>";
        echo "<table>";
        echo "<tr><th>Campo</th><th>Valor</th></tr>";
        echo "<tr><td>ID</td><td>{$viagem['id']}</td></tr>";
        echo "<tr><td>Cliente</td><td>{$viagem['cliente']}</td></tr>";
        echo "<tr><td>KM Inicial</td><td>{$viagem['km_inicial']}</td></tr>";
        echo "<tr><td>KM Final</td><td>{$viagem['km_final']}</td></tr>";
        echo "<tr><td>KM GPS Atual</td><td>" . ($viagem['km_gps_final'] ?: 'NULL') . "</td></tr>";
        echo "<tr><td>Data Início</td><td>{$viagem['data_inicio']}</td></tr>";
        echo "<tr><td>Data Fim</td><td>{$viagem['data_fim']}</td></tr>";
        echo "</table>";
        
        // Calcular KM GPS baseado no trajeto
        $trajeto = $viagem['trajeto'];
        if ($trajeto) {
            $pontos = json_decode($trajeto, true);
            if ($pontos && count($pontos) >= 2) {
                $distanciaTotal = 0;
                for ($i = 1; $i < count($pontos); $i++) {
                    $pontoAnterior = $pontos[$i-1];
                    $pontoAtual = $pontos[$i];
                    
                    if (isset($pontoAnterior[0], $pontoAnterior[1], $pontoAtual[0], $pontoAtual[1])) {
                        $distancia = calcularDistancia($pontoAnterior[0], $pontoAnterior[1], $pontoAtual[0], $pontoAtual[1]);
                        $distanciaTotal += $distancia;
                    }
                }
                
                echo "<h3>🧮 Cálculo do KM GPS</h3>";
                echo "<p><strong>Pontos GPS:</strong> " . count($pontos) . "</p>";
                echo "<p><strong>Distância Calculada:</strong> " . number_format($distanciaTotal, 3) . " km</p>";
                
                // Atualizar o banco se a distância for maior que 0
                if ($distanciaTotal > 0) {
                    $sqlUpdate = "UPDATE viagens SET km_gps_final = ? WHERE id = ?";
                    $stmtUpdate = $pdo->prepare($sqlUpdate);
                    $success = $stmtUpdate->execute([$distanciaTotal, $viagemId]);
                    
                    if ($success) {
                        echo "<p class='success'>✅ KM GPS atualizado com sucesso!</p>";
                        echo "<p>• Valor anterior: " . ($viagem['km_gps_final'] ?: 'NULL') . "</p>";
                        echo "<p>• Novo valor: " . number_format($distanciaTotal, 3) . " km</p>";
                    } else {
                        echo "<p class='error'>❌ Erro ao atualizar KM GPS!</p>";
                    }
                } else {
                    echo "<p class='warning'>⚠️ Distância calculada é 0 ou muito pequena</p>";
                }
            } else {
                echo "<p class='warning'>⚠️ Trajeto não tem pontos suficientes para cálculo</p>";
            }
        } else {
            echo "<p class='warning'>⚠️ Nenhum trajeto encontrado para esta viagem</p>";
        }
        
    } else {
        // Listar viagens que precisam de cálculo de KM GPS
        echo "<h2>📊 Viagens que Precisam de Cálculo de KM GPS</h2>";
        
        $sql = "SELECT id, cliente, km_inicial, km_final, km_gps_final, data_inicio, data_fim, 
                       CASE WHEN trajeto IS NOT NULL AND trajeto != '[]' THEN 'Sim' ELSE 'Não' END as tem_trajeto
                FROM viagens 
                WHERE (km_gps_final IS NULL OR km_gps_final = 0) 
                AND trajeto IS NOT NULL 
                AND trajeto != '[]'
                ORDER BY data_inicio DESC 
                LIMIT 20";
        
        $stmt = $pdo->query($sql);
        $viagens = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        if (empty($viagens)) {
            echo "<p class='success'>✅ Todas as viagens já têm KM GPS calculado!</p>";
        } else {
            echo "<table>";
            echo "<tr><th>ID</th><th>Cliente</th><th>KM Inicial</th><th>KM Final</th><th>KM GPS</th><th>Data Início</th><th>Tem Trajeto</th><th>Ação</th></tr>";
            
            foreach ($viagens as $viagem) {
                echo "<tr>";
                echo "<td>{$viagem['id']}</td>";
                echo "<td>{$viagem['cliente']}</td>";
                echo "<td>{$viagem['km_inicial']}</td>";
                echo "<td>{$viagem['km_final']}</td>";
                echo "<td>" . ($viagem['km_gps_final'] ?: 'NULL') . "</td>";
                echo "<td>{$viagem['data_inicio']}</td>";
                echo "<td>{$viagem['tem_trajeto']}</td>";
                echo "<td><a href='?viagem_id={$viagem['id']}' class='btn'>Calcular</a></td>";
                echo "</tr>";
            }
            echo "</table>";
            
            echo "<h3>🔧 Ações em Lote</h3>";
            echo "<form method='POST'>";
            echo "<input type='submit' name='calcular_todos' value='Calcular KM GPS para Todas' class='btn'>";
            echo "</form>";
        }
        
        // Processar cálculo em lote
        if ($_POST && isset($_POST['calcular_todos'])) {
            echo "<h3>🔄 Calculando KM GPS para Todas as Viagens...</h3>";
            
            $sqlTodas = "SELECT id, trajeto FROM viagens 
                        WHERE (km_gps_final IS NULL OR km_gps_final = 0) 
                        AND trajeto IS NOT NULL 
                        AND trajeto != '[]'";
            
            $stmtTodas = $pdo->query($sqlTodas);
            $todasViagens = $stmtTodas->fetchAll(PDO::FETCH_ASSOC);
            
            $atualizadas = 0;
            $erros = 0;
            
            foreach ($todasViagens as $viagem) {
                $trajeto = $viagem['trajeto'];
                $pontos = json_decode($trajeto, true);
                
                if ($pontos && count($pontos) >= 2) {
                    $distanciaTotal = 0;
                    for ($i = 1; $i < count($pontos); $i++) {
                        $pontoAnterior = $pontos[$i-1];
                        $pontoAtual = $pontos[$i];
                        
                        if (isset($pontoAnterior[0], $pontoAnterior[1], $pontoAtual[0], $pontoAtual[1])) {
                            $distancia = calcularDistancia($pontoAnterior[0], $pontoAnterior[1], $pontoAtual[0], $pontoAtual[1]);
                            $distanciaTotal += $distancia;
                        }
                    }
                    
                    if ($distanciaTotal > 0) {
                        $sqlUpdate = "UPDATE viagens SET km_gps_final = ? WHERE id = ?";
                        $stmtUpdate = $pdo->prepare($sqlUpdate);
                        $success = $stmtUpdate->execute([$distanciaTotal, $viagem['id']]);
                        
                        if ($success) {
                            $atualizadas++;
                        } else {
                            $erros++;
                        }
                    }
                }
            }
            
            echo "<p class='success'>✅ Processamento concluído!</p>";
            echo "<p>• Viagens atualizadas: $atualizadas</p>";
            echo "<p>• Erros: $erros</p>";
            
            // Recarregar página
            echo "<script>setTimeout(function(){ location.reload(); }, 2000);</script>";
        }
    }
    
} catch (Exception $e) {
    echo "<p class='error'>❌ Erro: " . $e->getMessage() . "</p>";
}

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