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

echo "<h2>🔧 Corrigindo AUTO_INCREMENT em Todas as Tabelas</h2>";

try {
    $pdo = Database::getConnection();
    
    echo "<h3>1. Listando todas as tabelas do banco</h3>";
    
    $stmt = $pdo->query("SHOW TABLES");
    $tabelas = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    echo "📋 Total de tabelas encontradas: " . count($tabelas) . "<br><br>";
    
    $tabelasComId = [];
    $tabelasCorrigidas = [];
    
    echo "<h3>2. Verificando tabelas com coluna 'id'</h3>";
    
    foreach ($tabelas as $tabela) {
        // Verificar se a tabela tem coluna 'id'
        $stmt = $pdo->query("SHOW COLUMNS FROM `$tabela` LIKE 'id'");
        $coluna = $stmt->fetch();
        
        if ($coluna) {
            $tabelasComId[] = $tabela;
            echo "📋 Tabela: <strong>$tabela</strong><br>";
            echo "   - Tipo: {$coluna['Type']}<br>";
            echo "   - Null: {$coluna['Null']}<br>";
            echo "   - Key: {$coluna['Key']}<br>";
            echo "   - Default: {$coluna['Default']}<br>";
            echo "   - Extra: {$coluna['Extra']}<br>";
            
            // Verificar se já tem AUTO_INCREMENT
            if ($coluna['Extra'] === 'auto_increment') {
                echo "   ✅ Já tem AUTO_INCREMENT<br>";
            } else {
                echo "   ❌ Não tem AUTO_INCREMENT - será corrigida<br>";
            }
            echo "<br>";
        }
    }
    
    echo "<h3>3. Corrigindo tabelas sem AUTO_INCREMENT</h3>";
    
    foreach ($tabelasComId as $tabela) {
        // Verificar novamente a coluna id
        $stmt = $pdo->query("SHOW COLUMNS FROM `$tabela` LIKE 'id'");
        $coluna = $stmt->fetch();
        
        if ($coluna && $coluna['Extra'] !== 'auto_increment') {
            echo "🔧 Corrigindo tabela: <strong>$tabela</strong><br>";
            
            try {
                // Verificar se é chave primária
                if ($coluna['Key'] === 'PRI') {
                    echo "   - É chave primária, modificando apenas AUTO_INCREMENT...<br>";
                    
                    // Modificar apenas para adicionar AUTO_INCREMENT
                    $pdo->exec("ALTER TABLE `$tabela` MODIFY `id` {$coluna['Type']} AUTO_INCREMENT");
                    echo "   ✅ AUTO_INCREMENT adicionado<br>";
                } else {
                    echo "   - Não é chave primária, tornando chave primária + AUTO_INCREMENT...<br>";
                    
                    // Primeiro tornar chave primária, depois adicionar AUTO_INCREMENT
                    $pdo->exec("ALTER TABLE `$tabela` MODIFY `id` {$coluna['Type']} NOT NULL");
                    $pdo->exec("ALTER TABLE `$tabela` ADD PRIMARY KEY (`id`)");
                    $pdo->exec("ALTER TABLE `$tabela` MODIFY `id` {$coluna['Type']} AUTO_INCREMENT");
                    echo "   ✅ Chave primária + AUTO_INCREMENT adicionados<br>";
                }
                
                $tabelasCorrigidas[] = $tabela;
                
            } catch (Exception $e) {
                echo "   ❌ Erro ao corrigir: " . $e->getMessage() . "<br>";
            }
        } else {
            echo "✅ Tabela <strong>$tabela</strong> já está correta<br>";
        }
    }
    
    echo "<h3>4. Removendo registros com ID = 0</h3>";
    
    foreach ($tabelasComId as $tabela) {
        // Verificar se há registros com ID = 0
        $stmt = $pdo->query("SELECT COUNT(*) as total FROM `$tabela` WHERE id = 0");
        $result = $stmt->fetch();
        
        if ($result['total'] > 0) {
            echo "🔧 Removendo registros com ID = 0 da tabela: <strong>$tabela</strong> ({$result['total']} registros)<br>";
            
            try {
                $pdo->exec("DELETE FROM `$tabela` WHERE id = 0");
                echo "   ✅ Registros removidos<br>";
            } catch (Exception $e) {
                echo "   ❌ Erro ao remover: " . $e->getMessage() . "<br>";
            }
        }
    }
    
    echo "<h3>5. Verificando AUTO_INCREMENT após correção</h3>";
    
    foreach ($tabelasComId as $tabela) {
        $stmt = $pdo->query("SHOW TABLE STATUS LIKE '$tabela'");
        $result = $stmt->fetch();
        
        echo "📋 <strong>$tabela</strong> - Auto_increment: {$result['Auto_increment']}<br>";
    }
    
    echo "<h3>6. Testando criação de registros</h3>";
    
    // Testar algumas tabelas importantes
    $tabelasTeste = ['solicitacoes_rotas', 'rota_clientes', 'solicitacoes_viagem', 'viagens'];
    
    foreach ($tabelasTeste as $tabela) {
        if (in_array($tabela, $tabelasComId)) {
            echo "🧪 Testando tabela: <strong>$tabela</strong><br>";
            
            try {
                // Verificar estrutura da tabela para inserção de teste
                $stmt = $pdo->query("SHOW COLUMNS FROM `$tabela`");
                $colunas = $stmt->fetchAll();
                
                // Criar INSERT básico baseado nas colunas
                $colunasInsert = [];
                $valoresInsert = [];
                
                foreach ($colunas as $coluna) {
                    if ($coluna['Field'] !== 'id') { // Pular coluna ID
                        $colunasInsert[] = $coluna['Field'];
                        
                        // Definir valor padrão baseado no tipo
                        if (strpos($coluna['Type'], 'varchar') !== false || strpos($coluna['Type'], 'text') !== false) {
                            $valoresInsert[] = "'TESTE_AUTO_INCREMENT'";
                        } elseif (strpos($coluna['Type'], 'int') !== false) {
                            $valoresInsert[] = "1";
                        } elseif (strpos($coluna['Type'], 'timestamp') !== false) {
                            $valoresInsert[] = "NOW()";
                        } else {
                            $valoresInsert[] = "NULL";
                        }
                    }
                }
                
                if (!empty($colunasInsert)) {
                    $sql = "INSERT INTO `$tabela` (" . implode(', ', $colunasInsert) . ") VALUES (" . implode(', ', $valoresInsert) . ")";
                    $pdo->exec($sql);
                    
                    $novoId = $pdo->lastInsertId();
                    echo "   ✅ Registro criado com ID: $novoId<br>";
                    
                    // Remover o registro de teste
                    $pdo->exec("DELETE FROM `$tabela` WHERE id = $novoId");
                    echo "   ✅ Registro de teste removido<br>";
                }
                
            } catch (Exception $e) {
                echo "   ❌ Erro no teste: " . $e->getMessage() . "<br>";
            }
        }
    }
    
    echo "<h3>✅ Correção Concluída!</h3>";
    echo "<p><strong>Total de tabelas verificadas:</strong> " . count($tabelasComId) . "<br>";
    echo "<strong>Tabelas corrigidas:</strong> " . count($tabelasCorrigidas) . "</p>";
    
    if (!empty($tabelasCorrigidas)) {
        echo "<p><strong>Tabelas que foram corrigidas:</strong></p>";
        echo "<ul>";
        foreach ($tabelasCorrigidas as $tabela) {
            echo "<li>$tabela</li>";
        }
        echo "</ul>";
    }
    
    echo "<p>🎉 Agora <strong>todas as tabelas</strong> com coluna 'id' têm AUTO_INCREMENT e não gerarão mais IDs = 0!</p>";
    
} catch (Exception $e) {
    echo "❌ Erro: " . $e->getMessage() . "<br>";
    echo "📋 Stack trace: " . $e->getTraceAsString() . "<br>";
}
?>
