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

echo "<h2>🔧 Corrigindo Estrutura dos Odômetros</h2>";

try {
    // Configurações do 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>✅ Conexão estabelecida!</p>";
    
    // 1. Adicionar coluna distancia_odometro na tabela viagens
    echo "<h3>1️⃣ Tabela viagens - Adicionando coluna distancia_odometro:</h3>";
    
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'distancia_odometro'");
    $colunaExiste = $stmt->rowCount() > 0;
    
    if ($colunaExiste) {
        echo "<p>✅ Coluna 'distancia_odometro' já existe na tabela viagens!</p>";
    } else {
        $sql = "ALTER TABLE viagens ADD COLUMN distancia_odometro INT DEFAULT NULL AFTER km_gps_final";
        $pdo->exec($sql);
        echo "<p>✅ Coluna 'distancia_odometro' adicionada com sucesso na tabela viagens!</p>";
    }
    
    // 2. Adicionar coluna odometro_final na tabela solicitacoes_rotas
    echo "<h3>2️⃣ Tabela solicitacoes_rotas - Adicionando coluna odometro_final:</h3>";
    
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'odometro_final'");
    $colunaExiste = $stmt->rowCount() > 0;
    
    if ($colunaExiste) {
        echo "<p>✅ Coluna 'odometro_final' já existe na tabela solicitacoes_rotas!</p>";
    } else {
        $sql = "ALTER TABLE solicitacoes_rotas ADD COLUMN odometro_final INT DEFAULT NULL AFTER km_real";
        $pdo->exec($sql);
        echo "<p>✅ Coluna 'odometro_final' adicionada com sucesso na tabela solicitacoes_rotas!</p>";
    }
    
    // 3. Calcular e preencher distancia_odometro na tabela viagens
    echo "<h3>3️⃣ Calculando distância dos odômetros na tabela viagens:</h3>";
    
    $sqlUpdateViagens = "
        UPDATE viagens 
        SET distancia_odometro = (km_final - km_inicial)
        WHERE km_final IS NOT NULL 
        AND km_inicial IS NOT NULL
        AND km_final > km_inicial
        AND distancia_odometro IS NULL
    ";
    
    $stmt = $pdo->prepare($sqlUpdateViagens);
    $stmt->execute();
    $viagensAtualizadas = $stmt->rowCount();
    
    echo "<p>✅ <strong>{$viagensAtualizadas}</strong> viagens atualizadas com distância dos odômetros!</p>";
    
    // 4. Atualizar odometro_final na tabela solicitacoes_rotas
    echo "<h3>4️⃣ Atualizando odômetro final nas rotas:</h3>";
    
    $sqlUpdateRotas = "
        UPDATE solicitacoes_rotas sr 
        SET odometro_final = (
            SELECT MAX(v.km_final)
            FROM rota_viagens rv 
            JOIN viagens v ON rv.viagem_id = v.id 
            WHERE rv.solicitacao_rota_id = sr.id 
            AND v.km_final IS NOT NULL 
            AND v.km_final > 0
        )
        WHERE sr.status = 'concluida'
        AND EXISTS (
            SELECT 1 FROM rota_viagens rv 
            JOIN viagens v ON rv.viagem_id = v.id 
            WHERE rv.solicitacao_rota_id = sr.id
        )
        AND odometro_final IS NULL
    ";
    
    $stmt = $pdo->prepare($sqlUpdateRotas);
    $stmt->execute();
    $rotasAtualizadas = $stmt->rowCount();
    
    echo "<p>✅ <strong>{$rotasAtualizadas}</strong> rotas atualizadas com odômetro final!</p>";
    
    // 5. Atualizar km_real nas rotas com a distância real dos odômetros
    echo "<h3>5️⃣ Atualizando km_real das rotas com distância dos odômetros:</h3>";
    
    $sqlUpdateKmReal = "
        UPDATE solicitacoes_rotas sr 
        SET km_real = (
            SELECT (MAX(v.km_final) - MIN(v.km_inicial))
            FROM rota_viagens rv 
            JOIN viagens v ON rv.viagem_id = v.id 
            WHERE rv.solicitacao_rota_id = sr.id 
            AND v.km_inicial IS NOT NULL 
            AND v.km_final IS NOT NULL
            AND v.km_inicial > 0 
            AND v.km_final > 0
        )
        WHERE sr.status = 'concluida'
        AND EXISTS (
            SELECT 1 FROM rota_viagens rv 
            JOIN viagens v ON rv.viagem_id = v.id 
            WHERE rv.solicitacao_rota_id = sr.id
        )
    ";
    
    $stmt = $pdo->prepare($sqlUpdateKmReal);
    $stmt->execute();
    $kmRealAtualizados = $stmt->rowCount();
    
    echo "<p>✅ <strong>{$kmRealAtualizados}</strong> rotas atualizadas com km_real correto!</p>";
    
    // 6. Verificar resultado
    echo "<h3>6️⃣ Verificando Resultado:</h3>";
    
    // Exemplo da tabela viagens
    echo "<h4>🚗 Tabela viagens:</h4>";
    $stmt = $pdo->query("
        SELECT 
            v.id,
            v.cliente,
            v.km_inicial as odometro_inicial,
            v.km_final as odometro_final,
            v.distancia_odometro,
            v.km_gps_final
        FROM viagens v 
        WHERE v.distancia_odometro IS NOT NULL
        ORDER BY v.id DESC
        LIMIT 3
    ");
    
    $exemplosViagens = $stmt->fetchAll();
    
    if ($exemplosViagens) {
        echo "<table border='1' style='border-collapse: collapse; margin: 10px 0;'>";
        echo "<tr><th>ID</th><th>Cliente</th><th>Odômetro Inicial</th><th>Odômetro Final</th><th>Distância Odômetro</th><th>KM GPS Final</th></tr>";
        foreach ($exemplosViagens as $exemplo) {
            echo "<tr>";
            echo "<td>{$exemplo['id']}</td>";
            echo "<td>{$exemplo['cliente']}</td>";
            echo "<td>{$exemplo['odometro_inicial']}</td>";
            echo "<td>{$exemplo['odometro_final']}</td>";
            echo "<td><strong>{$exemplo['distancia_odometro']} km</strong></td>";
            echo "<td>{$exemplo['km_gps_final']} km</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    
    // Exemplo da tabela solicitacoes_rotas
    echo "<h4>🗺️ Tabela solicitacoes_rotas:</h4>";
    $stmt = $pdo->query("
        SELECT 
            sr.id,
            sr.titulo,
            sr.km_real as distancia_odometro_rota,
            sr.odometro_final,
            (SELECT MIN(v.km_inicial) FROM rota_viagens rv JOIN viagens v ON rv.viagem_id = v.id WHERE rv.solicitacao_rota_id = sr.id) as odometro_inicial_rota
        FROM solicitacoes_rotas sr 
        WHERE sr.status = 'concluida' 
        AND sr.odometro_final IS NOT NULL
        LIMIT 3
    ");
    
    $exemplosRotas = $stmt->fetchAll();
    
    if ($exemplosRotas) {
        echo "<table border='1' style='border-collapse: collapse; margin: 10px 0;'>";
        echo "<tr><th>ID</th><th>Título</th><th>Distância Odômetro</th><th>Odômetro Final</th><th>Odômetro Inicial</th></tr>";
        foreach ($exemplosRotas as $exemplo) {
            echo "<tr>";
            echo "<td>{$exemplo['id']}</td>";
            echo "<td>{$exemplo['titulo']}</td>";
            echo "<td><strong>{$exemplo['distancia_odometro_rota']} km</strong></td>";
            echo "<td>{$exemplo['odometro_final']}</td>";
            echo "<td>{$exemplo['odometro_inicial_rota']}</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    
    echo "<h3>🎯 Estrutura Final:</h3>";
    echo "<ul>";
    echo "<li><strong>Tabela viagens:</strong></li>";
    echo "<ul>";
    echo "<li><strong>km_inicial</strong> → Odômetro inicial (ex: 42487)</li>";
    echo "<li><strong>km_final</strong> → Odômetro final (ex: 42539)</li>";
    echo "<li><strong>distancia_odometro</strong> → Resultado dos odômetros (ex: 52 km)</li>";
    echo "<li><strong>km_gps_final</strong> → KM real calculado pelo GPS (ex: 56.09 km)</li>";
    echo "</ul>";
    echo "<li><strong>Tabela solicitacoes_rotas:</strong></li>";
    echo "<ul>";
    echo "<li><strong>odometro_final</strong> → Odômetro final da rota (ex: 42539)</li>";
    echo "<li><strong>km_real</strong> → Distância percorrida pelos odômetros (ex: 52 km)</li>";
    echo "</ul>";
    echo "</ul>";
    
    echo "<h3>🎯 Próximos Passos:</h3>";
    echo "<ol>";
    echo "<li>✅ Estrutura dos odômetros corrigida</li>";
    echo "<li>✅ Dados calculados e atualizados</li>";
    echo "<li>🔧 Atualizar API rotas-recentes para usar os novos campos</li>";
    echo "<li>🔧 Atualizar dashboard para mostrar odômetro separado do GPS</li>";
    echo "</ol>";
    
} catch (Exception $e) {
    echo "<p style='color: red;'>❌ Erro: " . $e->getMessage() . "</p>";
}
?>
