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

echo "<h2>🔄 Renomeando Colunas 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>";
    
    // Primeiro, vamos verificar a estrutura atual das tabelas
    echo "<h3>🔍 Verificando Estrutura Atual das Tabelas:</h3>";
    
    // Verificar estrutura da tabela viagens
    echo "<h4>📋 Tabela viagens - Estrutura Atual:</h4>";
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens");
    $colunasViagens = $stmt->fetchAll();
    
    echo "<table border='1' style='border-collapse: collapse; margin: 10px 0;'>";
    echo "<tr><th>Campo</th><th>Tipo</th><th>Nulo</th><th>Chave</th><th>Padrão</th><th>Extra</th></tr>";
    foreach ($colunasViagens as $coluna) {
        echo "<tr>";
        echo "<td>{$coluna['Field']}</td>";
        echo "<td>{$coluna['Type']}</td>";
        echo "<td>{$coluna['Null']}</td>";
        echo "<td>{$coluna['Key']}</td>";
        echo "<td>{$coluna['Default']}</td>";
        echo "<td>{$coluna['Extra']}</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // Verificar estrutura da tabela solicitacoes_rotas
    echo "<h4>📋 Tabela solicitacoes_rotas - Estrutura Atual:</h4>";
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas");
    $colunasRotas = $stmt->fetchAll();
    
    echo "<table border='1' style='border-collapse: collapse; margin: 10px 0;'>";
    echo "<tr><th>Campo</th><th>Tipo</th><th>Nulo</th><th>Chave</th><th>Padrão</th><th>Extra</th></tr>";
    foreach ($colunasRotas as $coluna) {
        echo "<tr>";
        echo "<td>{$coluna['Field']}</td>";
        echo "<td>{$coluna['Type']}</td>";
        echo "<td>{$coluna['Null']}</td>";
        echo "<td>{$coluna['Default']}</td>";
        echo "<td>{$coluna['Extra']}</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // Agora vamos verificar quais colunas precisam ser renomeadas
    echo "<h3>🎯 Análise das Colunas:</h3>";
    
    $colunasExistentesViagens = array_column($colunasViagens, 'Field');
    $colunasExistentesRotas = array_column($colunasRotas, 'Field');
    
    // Verificar se as colunas antigas ainda existem
    $colunasAntigasViagens = ['km_inicial', 'km_final', 'km_gps_final'];
    $colunasAntigasRotas = ['km_real'];
    
    $colunasParaRenomearViagens = [];
    $colunasParaRenomearRotas = [];
    
    foreach ($colunasAntigasViagens as $colunaAntiga) {
        if (in_array($colunaAntiga, $colunasExistentesViagens)) {
            $colunasParaRenomearViagens[] = $colunaAntiga;
        }
    }
    
    foreach ($colunasAntigasRotas as $colunaAntiga) {
        if (in_array($colunaAntiga, $colunasExistentesRotas)) {
            $colunasParaRenomearRotas[] = $colunaAntiga;
        }
    }
    
    echo "<h4>🚗 Tabela viagens:</h4>";
    if (empty($colunasParaRenomearViagens)) {
        echo "<p>✅ Todas as colunas já foram renomeadas!</p>";
    } else {
        echo "<p>⚠️ Colunas que ainda precisam ser renomeadas:</p>";
        echo "<ul>";
        foreach ($colunasParaRenomearViagens as $coluna) {
            echo "<li>$coluna</li>";
        }
        echo "</ul>";
    }
    
    echo "<h4>🗺️ Tabela solicitacoes_rotas:</h4>";
    if (empty($colunasParaRenomearRotas)) {
        echo "<p>✅ Todas as colunas já foram renomeadas!</p>";
    } else {
        echo "<p>⚠️ Colunas que ainda precisam ser renomeadas:</p>";
        echo "<ul>";
        foreach ($colunasParaRenomearRotas as $coluna) {
            echo "<li>$coluna</li>";
        }
        echo "</ul>";
    }
    
    // Verificar se a coluna distancia_odometro existe na tabela viagens
    if (!in_array('distancia_odometro', $colunasExistentesViagens)) {
        echo "<h3>➕ Adicionando coluna distancia_odometro na tabela viagens:</h3>";
        $sql = "ALTER TABLE viagens ADD COLUMN distancia_odometro INT DEFAULT NULL AFTER km_gps_final";
        $pdo->exec($sql);
        echo "<p>✅ Coluna 'distancia_odometro' adicionada!</p>";
    } else {
        echo "<p>✅ Coluna 'distancia_odometro' já existe na tabela viagens</p>";
    }
    
    // Verificar se a coluna odometro_final_rota existe na tabela solicitacoes_rotas
    if (!in_array('odometro_final_rota', $colunasExistentesRotas)) {
        echo "<h3>➕ Adicionando coluna odometro_final_rota na tabela solicitacoes_rotas:</h3>";
        $sql = "ALTER TABLE solicitacoes_rotas ADD COLUMN odometro_final_rota INT DEFAULT NULL AFTER km_real";
        $pdo->exec($sql);
        echo "<p>✅ Coluna 'odometro_final_rota' adicionada!</p>";
    } else {
        echo "<p>✅ Coluna 'odometro_final_rota' já existe na tabela solicitacoes_rotas</p>";
    }
    
    // Agora vamos tentar renomear apenas as colunas que ainda existem
    if (!empty($colunasParaRenomearViagens)) {
        echo "<h3>1️⃣ Tabela viagens - Renomeando colunas restantes:</h3>";
        
        foreach ($colunasParaRenomearViagens as $colunaAntiga) {
            $colunaNova = '';
            switch ($colunaAntiga) {
                case 'km_inicial':
                    $colunaNova = 'odometro_inicial';
                    break;
                case 'km_final':
                    $colunaNova = 'odometro_final';
                    break;
                case 'km_gps_final':
                    $colunaNova = 'distancia_gps';
                    break;
            }
            
            if ($colunaNova && !in_array($colunaNova, $colunasExistentesViagens)) {
                $tipoColuna = '';
                foreach ($colunasViagens as $col) {
                    if ($col['Field'] === $colunaAntiga) {
                        $tipoColuna = $col['Type'];
                        break;
                    }
                }
                
                $sql = "ALTER TABLE viagens CHANGE COLUMN `$colunaAntiga` `$colunaNova` $tipoColuna";
                $pdo->exec($sql);
                echo "<p>✅ Coluna '$colunaAntiga' renomeada para '$colunaNova'!</p>";
            } else {
                echo "<p>⚠️ Coluna '$colunaAntiga' não pode ser renomeada (coluna nova já existe ou não encontrada)</p>";
            }
        }
    }
    
    if (!empty($colunasParaRenomearRotas)) {
        echo "<h3>2️⃣ Tabela solicitacoes_rotas - Renomeando colunas restantes:</h3>";
        
        foreach ($colunasParaRenomearRotas as $colunaAntiga) {
            $colunaNova = '';
            switch ($colunaAntiga) {
                case 'km_real':
                    $colunaNova = 'distancia_odometro_rota';
                    break;
            }
            
            if ($colunaNova && !in_array($colunaNova, $colunasExistentesRotas)) {
                $tipoColuna = '';
                foreach ($colunasRotas as $col) {
                    if ($col['Field'] === $colunaAntiga) {
                        $tipoColuna = $col['Type'];
                        break;
                    }
                }
                
                $sql = "ALTER TABLE solicitacoes_rotas CHANGE COLUMN `$colunaAntiga` `$colunaNova` $tipoColuna";
                $pdo->exec($sql);
                echo "<p>✅ Coluna '$colunaAntiga' renomeada para '$colunaNova'!</p>";
            } else {
                echo "<p>⚠️ Coluna '$colunaAntiga' não pode ser renomeada (coluna nova já existe ou não encontrada)</p>";
            }
        }
    }
    
    // 3. Atualizar dados nas tabelas com os novos nomes
    echo "<h3>3️⃣ Atualizando dados com novas nomenclaturas:</h3>";
    
    // Verificar se a coluna distancia_odometro existe e atualizar
    $stmt = $pdo->query("SHOW COLUMNS FROM viagens LIKE 'distancia_odometro'");
    if ($stmt->rowCount() > 0) {
        // Atualizar distancia_odometro na tabela viagens
        $sqlUpdateViagens = "
            UPDATE viagens 
            SET distancia_odometro = (odometro_final - odometro_inicial)
            WHERE odometro_final IS NOT NULL 
            AND odometro_inicial IS NOT NULL
            AND odometro_final > odometro_inicial
        ";
        
        $stmt = $pdo->prepare($sqlUpdateViagens);
        $stmt->execute();
        $viagensAtualizadas = $stmt->rowCount();
        
        echo "<p>✅ <strong>{$viagensAtualizadas}</strong> viagens atualizadas com distância dos odômetros!</p>";
    }
    
    // Verificar se a coluna odometro_final_rota existe e atualizar
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'odometro_final_rota'");
    if ($stmt->rowCount() > 0) {
        // Atualizar odometro_final_rota na tabela solicitacoes_rotas
        $sqlUpdateRotas = "
            UPDATE solicitacoes_rotas sr 
            SET odometro_final_rota = (
                SELECT MAX(v.odometro_final)
                FROM rota_viagens rv 
                JOIN viagens v ON rv.viagem_id = v.id 
                WHERE rv.solicitacao_rota_id = sr.id 
                AND v.odometro_final IS NOT NULL 
                AND v.odometro_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($sqlUpdateRotas);
        $stmt->execute();
        $rotasAtualizadas = $stmt->rowCount();
        
        echo "<p>✅ <strong>{$rotasAtualizadas}</strong> rotas atualizadas com odômetro final!</p>";
    }
    
    // Verificar se a coluna distancia_odometro_rota existe e atualizar
    $stmt = $pdo->query("SHOW COLUMNS FROM solicitacoes_rotas LIKE 'distancia_odometro_rota'");
    if ($stmt->rowCount() > 0) {
        // Atualizar distancia_odometro_rota nas rotas
        $sqlUpdateDistancia = "
            UPDATE solicitacoes_rotas sr 
            SET distancia_odometro_rota = (
                SELECT (MAX(v.odometro_final) - MIN(v.odometro_inicial))
                FROM rota_viagens rv 
                JOIN viagens v ON rv.viagem_id = v.id 
                WHERE rv.solicitacao_rota_id = sr.id 
                AND v.odometro_inicial IS NOT NULL 
                AND v.odometro_final IS NOT NULL
                AND v.odometro_inicial > 0 
                AND v.odometro_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($sqlUpdateDistancia);
        $stmt->execute();
        $distanciaAtualizada = $stmt->rowCount();
        
        echo "<p>✅ <strong>{$distanciaAtualizada}</strong> rotas atualizadas com distância dos odômetros!</p>";
    }
    
    // 4. Verificar resultado final
    echo "<h3>4️⃣ Verificando Resultado Final:</h3>";
    
    // Exemplo da tabela viagens
    echo "<h4>🚗 Tabela viagens (Nova Estrutura):</h4>";
    $stmt = $pdo->query("
        SELECT 
            v.id,
            v.cliente,
            v.odometro_inicial,
            v.odometro_final,
            v.distancia_odometro,
            v.distancia_gps
        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>Distância GPS</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['distancia_gps']} km</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    
    // Exemplo da tabela solicitacoes_rotas
    echo "<h4>🗺️ Tabela solicitacoes_rotas (Nova Estrutura):</h4>";
    $stmt = $pdo->query("
        SELECT 
            sr.id,
            sr.titulo,
            sr.distancia_odometro_rota,
            sr.odometro_final_rota,
            (SELECT MIN(v.odometro_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_rota 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_rota']}</td>";
            echo "<td>{$exemplo['odometro_inicial_rota']}</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    
    echo "<h3>🎯 Nova Estrutura das Tabelas:</h3>";
    echo "<ul>";
    echo "<li><strong>Tabela viagens:</strong></li>";
    echo "<ul>";
    echo "<li><strong>odometro_inicial</strong> → Odômetro inicial (ex: 42487)</li>";
    echo "<li><strong>odometro_final</strong> → Odômetro final (ex: 42539)</li>";
    echo "<li><strong>distancia_odometro</strong> → Distância calculada pelos odômetros (ex: 52 km)</li>";
    echo "<li><strong>distancia_gps</strong> → Distância calculada pelo GPS (ex: 56.09 km)</li>";
    echo "</ul>";
    echo "<li><strong>Tabela solicitacoes_rotas:</strong></li>";
    echo "<ul>";
    echo "<li><strong>odometro_final_rota</strong> → Odômetro final da rota (ex: 42539)</li>";
    echo "<li><strong>distancia_odometro_rota</strong> → Distância total da rota pelos odômetros (ex: 52 km)</li>";
    echo "</ul>";
    echo "</ul>";
    
    echo "<h3>🎯 Próximos Passos:</h3>";
    echo "<ol>";
    echo "<li>✅ Colunas renomeadas com sucesso</li>";
    echo "<li>✅ Dados atualizados com novas nomenclaturas</li>";
    echo "<li>🔧 Atualizar APIs para usar os novos nomes de colunas</li>";
    echo "<li>🔧 Atualizar dashboard e frontend para usar os novos nomes</li>";
    echo "<li>🔧 Atualizar aplicativo Android para usar os novos nomes</li>";
    echo "</ol>";
    
    echo "<h3>⚠️ IMPORTANTE:</h3>";
    echo "<p>Agora você precisa atualizar todos os arquivos do sistema que fazem referência às colunas antigas:</p>";
    echo "<ul>";
    echo "<li><strong>APIs:</strong> api-simples-v2.php, detalhes-viagem-completa.php</li>";
    echo "<li><strong>Dashboard:</strong> dashboard.html</li>";
    echo "<li><strong>Android:</strong> Todas as classes que fazem referência às colunas antigas</li>";
    echo "</ul>";
    
} catch (Exception $e) {
    echo "<p style='color: red;'>❌ Erro: " . $e->getMessage() . "</p>";
}
?>
