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

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

echo "<h1>🔧 CORREÇÃO DA ESTRUTURA DO BANCO DE DADOS</h1>";
echo "<hr>";

try {
    $pdo = new PDO($dsn, $username, $password, $options);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "<h2>📊 ETAPA 1: Analisando estrutura atual</h2>";
    
    // Verificar estrutura atual da tabela checklist_veiculo
    $sql = "DESCRIBE checklist_veiculo";
    $result = $pdo->query($sql);
    $colunas = $result->fetchAll(PDO::FETCH_ASSOC);
    
    echo "<h3>Estrutura atual checklist_veiculo:</h3>";
    echo "<table border='1' cellpadding='5'>";
    echo "<tr><th>Campo</th><th>Tipo</th><th>Nulo</th><th>Chave</th><th>Padrão</th></tr>";
    foreach ($colunas 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 "</tr>";
    }
    echo "</table>";
    
    // Verificar se tipo_veiculo já existe
    $temTipoVeiculo = false;
    foreach ($colunas as $coluna) {
        if ($coluna['Field'] === 'tipo_veiculo') {
            $temTipoVeiculo = true;
            break;
        }
    }
    
    echo "<h2>📊 ETAPA 2: Adicionando coluna tipo_veiculo</h2>";
    
    if (!$temTipoVeiculo) {
        echo "<p>✅ Adicionando coluna tipo_veiculo...</p>";
        
        $sql = "ALTER TABLE checklist_veiculo 
                ADD COLUMN tipo_veiculo ENUM('CARRO', 'MOTO') NOT NULL DEFAULT 'CARRO' 
                AFTER veiculo_id";
        $pdo->exec($sql);
        
        echo "<p>✅ Coluna tipo_veiculo adicionada!</p>";
        
        // Atualizar registros existentes
        $sql = "UPDATE checklist_veiculo SET tipo_veiculo = 'CARRO'";
        $updated = $pdo->exec($sql);
        echo "<p>✅ $updated registros atualizados para CARRO</p>";
        
    } else {
        echo "<p>ℹ️ Coluna tipo_veiculo já existe</p>";
    }
    
    echo "<h2>📊 ETAPA 3: Criando tabela checklist_fotos (sem foreign key)</h2>";
    
    // Primeiro dropar a tabela se ela existir (para recriar limpa)
    $sql = "DROP TABLE IF EXISTS checklist_fotos";
    $pdo->exec($sql);
    echo "<p>🗑️ Tabela anterior removida (se existia)</p>";
    
    // Criar tabela sem foreign key inicialmente
    $sql = "CREATE TABLE checklist_fotos (
        id INT AUTO_INCREMENT PRIMARY KEY,
        checklist_id INT NOT NULL,
        item_id VARCHAR(50) NOT NULL COMMENT 'ID do item do checklist',
        nome_arquivo VARCHAR(255) NOT NULL COMMENT 'Nome do arquivo da foto',
        caminho_arquivo VARCHAR(500) NOT NULL COMMENT 'Caminho completo da foto',
        descricao_problema TEXT COMMENT 'Descrição do problema da foto',
        tamanho_arquivo INT COMMENT 'Tamanho do arquivo em bytes',
        tipo_mime VARCHAR(100) DEFAULT 'image/jpeg',
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        
        INDEX idx_checklist_id (checklist_id),
        INDEX idx_item_id (item_id),
        INDEX idx_created_at (created_at)
    ) ENGINE=InnoDB 
      DEFAULT CHARSET=utf8mb4 
      COLLATE=utf8mb4_unicode_ci 
      COMMENT='Fotos dos problemas encontrados nos checklists'";
      
    $pdo->exec($sql);
    echo "<p>✅ Tabela checklist_fotos criada sem foreign key</p>";
    
    echo "<h2>📊 ETAPA 4: Verificando compatibilidade para foreign key</h2>";
    
    // Verificar tipo da coluna id em checklist_veiculo
    $sql = "SELECT DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT 
            FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_SCHEMA = DATABASE() 
            AND TABLE_NAME = 'checklist_veiculo' 
            AND COLUMN_NAME = 'id'";
    $result = $pdo->query($sql);
    $infoId = $result->fetch(PDO::FETCH_ASSOC);
    
    echo "<p>📋 Tipo da coluna checklist_veiculo.id: {$infoId['DATA_TYPE']}</p>";
    
    // Verificar tipo da coluna checklist_id em checklist_fotos
    $sql = "SELECT DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT 
            FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_SCHEMA = DATABASE() 
            AND TABLE_NAME = 'checklist_fotos' 
            AND COLUMN_NAME = 'checklist_id'";
    $result = $pdo->query($sql);
    $infoChecklistId = $result->fetch(PDO::FETCH_ASSOC);
    
    echo "<p>📋 Tipo da coluna checklist_fotos.checklist_id: {$infoChecklistId['DATA_TYPE']}</p>";
    
    echo "<h2>📊 ETAPA 5: Adicionando foreign key</h2>";
    
    try {
        $sql = "ALTER TABLE checklist_fotos 
                ADD CONSTRAINT fk_checklist_fotos_checklist_id 
                FOREIGN KEY (checklist_id) 
                REFERENCES checklist_veiculo(id) 
                ON DELETE CASCADE";
        $pdo->exec($sql);
        echo "<p>✅ Foreign key adicionada com sucesso!</p>";
        
    } catch (PDOException $e) {
        echo "<p style='color: orange;'>⚠️ Foreign key não pôde ser criada: " . $e->getMessage() . "</p>";
        echo "<p>💡 A tabela funcionará normalmente sem a foreign key</p>";
    }
    
    echo "<h2>📊 ETAPA 6: Criando diretórios para upload</h2>";
    
    $diretorioBase = __DIR__ . '/uploads';
    $diretorioChecklist = $diretorioBase . '/checklist-fotos';
    $diretorioAno = $diretorioChecklist . '/' . date('Y');
    $diretorioMes = $diretorioAno . '/' . date('m');
    
    $diretorios = [
        $diretorioBase => 'Base uploads',
        $diretorioChecklist => 'Checklist fotos',
        $diretorioAno => 'Ano ' . date('Y'),
        $diretorioMes => 'Mês ' . date('m')
    ];
    
    foreach ($diretorios as $dir => $nome) {
        if (!file_exists($dir)) {
            if (mkdir($dir, 0755, true)) {
                echo "<p>✅ Diretório criado: $nome ($dir)</p>";
            } else {
                echo "<p style='color: red;'>❌ Erro ao criar: $nome ($dir)</p>";
            }
        } else {
            echo "<p>ℹ️ Já existe: $nome</p>";
        }
    }
    
    echo "<h2>📊 ETAPA 7: Verificação final</h2>";
    
    // Verificar se as tabelas existem
    $sql = "SHOW TABLES LIKE 'checklist_%'";
    $result = $pdo->query($sql);
    $tabelas = $result->fetchAll(PDO::FETCH_COLUMN);
    
    echo "<h3>Tabelas relacionadas ao checklist:</h3>";
    echo "<ul>";
    foreach ($tabelas as $tabela) {
        echo "<li>✅ $tabela</li>";
    }
    echo "</ul>";
    
    // Estatísticas
    $sql = "SELECT 
                COALESCE(tipo_veiculo, 'SEM_TIPO') as tipo,
                COUNT(*) as total
            FROM checklist_veiculo 
            GROUP BY tipo_veiculo";
    $result = $pdo->query($sql);
    
    echo "<h3>Registros por tipo:</h3>";
    echo "<table border='1' cellpadding='5'>";
    echo "<tr><th>Tipo</th><th>Quantidade</th></tr>";
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
        echo "<tr><td>{$row['tipo']}</td><td>{$row['total']}</td></tr>";
    }
    echo "</table>";
    
    $sql = "SELECT COUNT(*) as total FROM checklist_fotos";
    $result = $pdo->query($sql);
    $totalFotos = $result->fetch()['total'];
    echo "<p>📷 Total de fotos: $totalFotos</p>";
    
    echo "<h2>🎉 ESTRUTURA CORRIGIDA COM SUCESSO!</h2>";
    echo "<div style='background: #d4edda; padding: 15px; border: 1px solid #c3e6cb; border-radius: 5px; margin: 20px 0;'>";
    echo "<h3>✅ Estrutura do banco atualizada:</h3>";
    echo "<ul>";
    echo "<li>🏍️ Coluna tipo_veiculo adicionada (CARRO/MOTO)</li>";
    echo "<li>📷 Tabela checklist_fotos criada</li>";
    echo "<li>📁 Diretórios de upload configurados</li>";
    echo "<li>🔗 Foreign keys configuradas (quando possível)</li>";
    echo "<li>📊 Índices otimizados</li>";
    echo "</ul>";
    
    echo "<h3>🚀 Próximos passos:</h3>";
    echo "<ol>";
    echo "<li>Testar API v3: <a href='api/relatorios/api-checklist-v3.php' target='_blank'>api-checklist-v3.php</a></li>";
    echo "<li>Verificar tipos de veículo: <a href='api/relatorios/api-checklist-v3.php?acao=tipos_veiculo' target='_blank'>tipos_veiculo</a></li>";
    echo "<li>Atualizar app Android</li>";
    echo "<li>Testar funcionalidades completas</li>";
    echo "</ol>";
    echo "</div>";
    
} catch (PDOException $e) {
    echo "<div style='background: #f8d7da; padding: 15px; border: 1px solid #f5c6cb; border-radius: 5px;'>";
    echo "<h3>❌ Erro durante correção:</h3>";
    echo "<p><strong>Código:</strong> " . $e->getCode() . "</p>";
    echo "<p><strong>Mensagem:</strong> " . htmlspecialchars($e->getMessage()) . "</p>";
    echo "<p><strong>Arquivo:</strong> " . $e->getFile() . "</p>";
    echo "<p><strong>Linha:</strong> " . $e->getLine() . "</p>";
    echo "</div>";
}
?> 
