<?php
// Script simplificado para verificar e corrigir tabelas existentes

error_reporting(E_ALL);
ini_set('display_errors', 1);

// Configuração do banco
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_geraldo';
$password = 'Pinheiro@2024';

echo "<!DOCTYPE html><html><head><meta charset='utf-8'><title>Verificar Tabelas</title></head><body>";
echo "<h1>🔧 Verificação e Correção de Tabelas</h1>";

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "<p>✅ Conectado ao banco de dados</p>";
    
    // 1. Verificar quais tabelas existem
    echo "<h2>1. Verificando tabelas existentes...</h2>";
    
    $tabelas_sistema = ['solicitacoes_viagem', 'notificacoes_push', 'fcm_tokens'];
    $tabelas_relacionadas = ['tecnicos', 'veiculos', 'clientes'];
    
    foreach (array_merge($tabelas_sistema, $tabelas_relacionadas) as $tabela) {
        $stmt = $pdo->query("SHOW TABLES LIKE '$tabela'");
        if ($stmt->rowCount() > 0) {
            echo "✅ Tabela <strong>$tabela</strong> existe<br>";
        } else {
            echo "❌ Tabela <strong>$tabela</strong> NÃO existe<br>";
        }
    }
    
    // 2. Verificar estrutura da tabela solicitacoes_viagem
    echo "<h2>2. Verificando estrutura da tabela solicitacoes_viagem...</h2>";
    
    $stmt = $pdo->query("SHOW TABLES LIKE 'solicitacoes_viagem'");
    if ($stmt->rowCount() > 0) {
        echo "<h3>Estrutura atual:</h3>";
        $stmt = $pdo->query("DESCRIBE solicitacoes_viagem");
        echo "<ul>";
        while ($row = $stmt->fetch()) {
            echo "<li><strong>{$row['Field']}</strong>: {$row['Type']} {$row['Null']} {$row['Key']} {$row['Extra']}</li>";
        }
        echo "</ul>";
        
        // Verificar se há dados na tabela
        $stmt = $pdo->query("SELECT COUNT(*) as total FROM solicitacoes_viagem");
        $total = $stmt->fetchColumn();
        echo "<p>📊 Total de registros: <strong>$total</strong></p>";
        
        if ($total > 0) {
            echo "<h3>Últimos 3 registros:</h3>";
            $stmt = $pdo->query("SELECT * FROM solicitacoes_viagem ORDER BY id DESC LIMIT 3");
            echo "<table border='1' style='border-collapse: collapse; width: 100%;'>";
            echo "<tr>";
            $primeiro = true;
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                if ($primeiro) {
                    echo "<tr>";
                    foreach (array_keys($row) as $coluna) {
                        echo "<th style='padding: 5px; background: #f0f0f0;'>$coluna</th>";
                    }
                    echo "</tr>";
                    $primeiro = false;
                }
                echo "<tr>";
                foreach ($row as $valor) {
                    echo "<td style='padding: 5px;'>" . htmlspecialchars($valor ?? '') . "</td>";
                }
                echo "</tr>";
            }
            echo "</table>";
        }
    } else {
        echo "<p>❌ Tabela solicitacoes_viagem não existe - precisa ser criada</p>";
    }
    
    // 3. Verificar chaves estrangeiras
    echo "<h2>3. Verificando chaves estrangeiras...</h2>";
    
    $stmt = $pdo->query("
        SELECT 
            CONSTRAINT_NAME,
            TABLE_NAME,
            COLUMN_NAME,
            REFERENCED_TABLE_NAME,
            REFERENCED_COLUMN_NAME
        FROM 
            information_schema.KEY_COLUMN_USAGE 
        WHERE 
            REFERENCED_TABLE_SCHEMA = '$dbname' 
            AND TABLE_NAME = 'solicitacoes_viagem'
    ");
    
    if ($stmt->rowCount() > 0) {
        echo "<h3>Chaves estrangeiras existentes:</h3>";
        echo "<ul>";
        while ($fk = $stmt->fetch()) {
            echo "<li><strong>{$fk['CONSTRAINT_NAME']}</strong>: {$fk['COLUMN_NAME']} → {$fk['REFERENCED_TABLE_NAME']}.{$fk['REFERENCED_COLUMN_NAME']}</li>";
        }
        echo "</ul>";
    } else {
        echo "<p>ℹ️ Nenhuma chave estrangeira encontrada</p>";
    }
    
    // 4. Ações de correção disponíveis
    echo "<h2>4. Ações disponíveis:</h2>";
    
    if (isset($_GET['acao'])) {
        switch ($_GET['acao']) {
            case 'remover_fks':
                echo "<h3>Removendo todas as FKs da tabela solicitacoes_viagem...</h3>";
                
                $stmt = $pdo->query("
                    SELECT CONSTRAINT_NAME
                    FROM information_schema.KEY_COLUMN_USAGE 
                    WHERE REFERENCED_TABLE_SCHEMA = '$dbname' 
                    AND TABLE_NAME = 'solicitacoes_viagem'
                ");
                
                while ($fk = $stmt->fetch()) {
                    try {
                        $pdo->exec("ALTER TABLE solicitacoes_viagem DROP FOREIGN KEY {$fk['CONSTRAINT_NAME']}");
                        echo "✅ FK {$fk['CONSTRAINT_NAME']} removida<br>";
                    } catch (Exception $e) {
                        echo "❌ Erro ao remover FK {$fk['CONSTRAINT_NAME']}: {$e->getMessage()}<br>";
                    }
                }
                echo "<p><a href='?'>← Voltar</a></p>";
                break;
                
            case 'criar_tabelas_simples':
                echo "<h3>Criando tabelas sem FKs...</h3>";
                
                // Criar notificacoes_push
                try {
                    $pdo->exec("
                        CREATE TABLE IF NOT EXISTS notificacoes_push (
                            id INT AUTO_INCREMENT PRIMARY KEY,
                            usuario_id INT NOT NULL,
                            tipo ENUM('solicitacao_viagem', 'aprovacao_viagem', 'negacao_viagem') NOT NULL,
                            titulo VARCHAR(255) NOT NULL,
                            mensagem TEXT NOT NULL,
                            dados_extras JSON,
                            lida BOOLEAN DEFAULT FALSE,
                            data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                        )
                    ");
                    echo "✅ Tabela notificacoes_push criada<br>";
                } catch (Exception $e) {
                    echo "ℹ️ notificacoes_push: {$e->getMessage()}<br>";
                }
                
                // Criar fcm_tokens
                try {
                    $pdo->exec("
                        CREATE TABLE IF NOT EXISTS fcm_tokens (
                            id INT AUTO_INCREMENT PRIMARY KEY,
                            usuario_id INT NOT NULL,
                            token VARCHAR(500) NOT NULL,
                            dispositivo VARCHAR(255),
                            data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                            data_atualizacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                        )
                    ");
                    echo "✅ Tabela fcm_tokens criada<br>";
                } catch (Exception $e) {
                    echo "ℹ️ fcm_tokens: {$e->getMessage()}<br>";
                }
                
                echo "<p><a href='?'>← Voltar</a></p>";
                break;
                
            case 'limpar_dados':
                echo "<h3>Limpando dados de teste...</h3>";
                
                try {
                    $pdo->exec("DELETE FROM solicitacoes_viagem WHERE motivo LIKE '%teste%'");
                    $deleted = $pdo->rowCount();
                    echo "✅ $deleted registros de teste removidos<br>";
                } catch (Exception $e) {
                    echo "❌ Erro: {$e->getMessage()}<br>";
                }
                
                echo "<p><a href='?'>← Voltar</a></p>";
                break;
        }
    } else {
        echo "<div style='background: #f0f0f0; padding: 15px; margin: 10px 0;'>";
        echo "<h3>Escolha uma ação:</h3>";
        echo "<p><a href='?acao=remover_fks' style='background: #ff6b6b; color: white; padding: 10px; text-decoration: none; border-radius: 5px;'>🗑️ Remover todas as FKs problemáticas</a></p>";
        echo "<p><a href='?acao=criar_tabelas_simples' style='background: #4ecdc4; color: white; padding: 10px; text-decoration: none; border-radius: 5px;'>➕ Criar tabelas auxiliares (sem FKs)</a></p>";
        echo "<p><a href='?acao=limpar_dados' style='background: #45b7d1; color: white; padding: 10px; text-decoration: none; border-radius: 5px;'>🧹 Limpar dados de teste</a></p>";
        echo "</div>";
        
        echo "<div style='background: #e8f5e8; padding: 15px; margin: 10px 0;'>";
        echo "<h3>✅ Testes disponíveis:</h3>";
        echo "<p><a href='teste-sistema-solicitacoes.html' target='_blank'>🧪 Testar Sistema Completo</a></p>";
        echo "<p><a href='api/gestao/solicitacoes-viagem.php?acao=listar' target='_blank'>📋 Ver API de Solicitações</a></p>";
        echo "<p><a href='api/gestao/notificacoes.php?acao=contar&usuario_id=1' target='_blank'>🔔 Ver API de Notificações</a></p>";
        echo "</div>";
    }
    
} catch (Exception $e) {
    echo "<p style='color: red;'>❌ <strong>Erro:</strong> {$e->getMessage()}</p>";
}

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