<?php
/**
 * Script de Diagnóstico para liberar_acesso_manual.php
 * Testa todas as dependências e identifica problemas
 */

// ATIVAR TODOS OS ERROS (CRÍTICO)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Buffer de saída para capturar erros
ob_start();

?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Diagnóstico - liberar_acesso_manual.php</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: #1a1a1a;
            color: #fff;
            padding: 20px;
            line-height: 1.6;
        }
        .container {
            max-width: 900px;
            margin: 0 auto;
            background: #252525;
            border-radius: 12px;
            padding: 30px;
            box-shadow: 0 4px 20px rgba(0,0,0,0.3);
        }
        h1 {
            color: #00e676;
            margin-bottom: 10px;
            font-size: 28px;
        }
        .subtitle {
            color: #888;
            margin-bottom: 30px;
            font-size: 14px;
        }
        .test-section {
            background: #2a2a2a;
            border-radius: 8px;
            padding: 20px;
            margin-bottom: 20px;
            border-left: 4px solid #444;
        }
        .test-section.success {
            border-left-color: #10b981;
        }
        .test-section.error {
            border-left-color: #ef4444;
        }
        .test-section.warning {
            border-left-color: #f59e0b;
        }
        .test-title {
            font-size: 18px;
            font-weight: 600;
            margin-bottom: 15px;
            display: flex;
            align-items: center;
            gap: 10px;
        }
        .status {
            font-size: 24px;
        }
        .test-details {
            background: #1a1a1a;
            padding: 15px;
            border-radius: 6px;
            margin-top: 10px;
            font-family: 'Courier New', monospace;
            font-size: 13px;
            white-space: pre-wrap;
            word-wrap: break-word;
            color: #ccc;
        }
        .error-message {
            color: #ef4444;
            font-weight: 600;
        }
        .success-message {
            color: #10b981;
            font-weight: 600;
        }
        .warning-message {
            color: #f59e0b;
            font-weight: 600;
        }
        .info {
            color: #60a5fa;
        }
        hr {
            border: none;
            border-top: 1px solid #444;
            margin: 30px 0;
        }
        .summary {
            background: #1a1a1a;
            padding: 20px;
            border-radius: 8px;
            margin-top: 30px;
        }
        .summary h2 {
            color: #00e676;
            margin-bottom: 15px;
        }
        .summary-item {
            padding: 10px;
            margin: 5px 0;
            border-radius: 4px;
            background: #2a2a2a;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔍 Diagnóstico - liberar_acesso_manual.php</h1>
        <p class="subtitle">Testando dependências e identificando problemas</p>
        
        <?php
        $results = [];
        $totalTests = 0;
        $passedTests = 0;
        $failedTests = 0;
        $warnings = 0;
        
        // Função auxiliar para registrar resultado
        function registerTest(&$results, &$totalTests, &$passedTests, &$failedTests, &$warnings, $title, $success, $details, $isWarning = false) {
            $totalTests++;
            if ($isWarning) {
                $warnings++;
                $status = 'warning';
                $icon = '⚠️';
            } elseif ($success) {
                $passedTests++;
                $status = 'success';
                $icon = '✅';
            } else {
                $failedTests++;
                $status = 'error';
                $icon = '❌';
            }
            
            $results[] = [
                'title' => $title,
                'status' => $status,
                'icon' => $icon,
                'details' => $details
            ];
        }
        
        // ============================================================
        // TESTE 1: VERIFICAÇÃO DO DIRETÓRIO ATUAL
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        echo '<span class="status">📁</span>';
        echo '<span>Teste 1: Diretório Atual e Caminhos</span>';
        echo '</div>';
        
        $currentDir = __DIR__;
        $currentFile = __FILE__;
        $details = "Diretório atual (__DIR__): $currentDir\n";
        $details .= "Arquivo atual (__FILE__): $currentFile\n";
        
        $configPath = __DIR__ . '/../config/config_db.php';
        $configPathAbsolute = realpath($configPath);
        $details .= "\nCaminho relativo config_db.php: $configPath\n";
        $details .= "Caminho absoluto: " . ($configPathAbsolute ? $configPathAbsolute : 'NÃO ENCONTRADO') . "\n";
        
        $emailConfigPath = __DIR__ . '/../config_email/email_config.php';
        $emailConfigPathAbsolute = realpath($emailConfigPath);
        $details .= "\nCaminho relativo email_config.php: $emailConfigPath\n";
        $details .= "Caminho absoluto: " . ($emailConfigPathAbsolute ? $emailConfigPathAbsolute : 'NÃO ENCONTRADO') . "\n";
        
        $vendorPath = __DIR__ . '/../vendor/autoload.php';
        $vendorPathAbsolute = realpath($vendorPath);
        $details .= "\nCaminho relativo vendor/autoload.php: $vendorPath\n";
        $details .= "Caminho absoluto: " . ($vendorPathAbsolute ? $vendorPathAbsolute : 'NÃO ENCONTRADO') . "\n";
        
        echo '<div class="test-details">' . htmlspecialchars($details) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Verificação de Diretórios', true, $details);
        
        // ============================================================
        // TESTE 2: EXISTÊNCIA DO ARQUIVO config_db.php
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $configExists = file_exists($configPath);
        if ($configExists) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">❌</span>';
        }
        echo '<span>Teste 2: Existência de config_db.php</span>';
        echo '</div>';
        
        $details = '';
        if ($configExists) {
            $details .= "✅ Arquivo encontrado: $configPathAbsolute\n";
            $details .= "Tamanho: " . filesize($configPathAbsolute) . " bytes\n";
            $details .= "Permissões: " . substr(sprintf('%o', fileperms($configPathAbsolute)), -4) . "\n";
        } else {
            $details .= "❌ Arquivo NÃO encontrado em: $configPath\n";
            $details .= "Verifique se o caminho está correto.\n";
        }
        
        echo '<div class="test-details">' . htmlspecialchars($details) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Existência config_db.php', $configExists, $details);
        
        // ============================================================
        // TESTE 3: CARREGAMENTO DO config_db.php
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $configLoaded = false;
        $configError = '';
        
        if ($configExists) {
            try {
                ob_start();
                require_once $configPath;
                $output = ob_get_clean();
                
                if (!empty($output)) {
                    $configError = "AVISO: O arquivo produziu output: " . htmlspecialchars(substr($output, 0, 200));
                }
                
                $configLoaded = true;
            } catch (Throwable $e) {
                $configError = "ERRO ao carregar config_db.php:\n" . $e->getMessage() . "\nLinha: " . $e->getLine() . "\nArquivo: " . $e->getFile();
                $configLoaded = false;
            }
        } else {
            $configError = "Não foi possível testar (arquivo não existe)";
        }
        
        if ($configLoaded) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">❌</span>';
        }
        echo '<span>Teste 3: Carregamento de config_db.php</span>';
        echo '</div>';
        
        $details = $configError ?: "✅ Arquivo carregado com sucesso\n";
        if ($configLoaded && isset($pdo)) {
            $details .= "✅ Variável \$pdo foi criada\n";
        } elseif ($configLoaded) {
            $details .= "⚠️ Arquivo carregado mas variável \$pdo não existe\n";
        }
        
        echo '<div class="test-details">' . htmlspecialchars($details) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Carregamento config_db.php', $configLoaded && isset($pdo), $details, !$configLoaded && $configExists);
        
        // ============================================================
        // TESTE 4: CONEXÃO COM BANCO DE DADOS
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $dbConnected = false;
        $dbError = '';
        
        if (isset($pdo)) {
            try {
                $stmt = $pdo->query("SELECT 1 as test");
                $result = $stmt->fetch(PDO::FETCH_ASSOC);
                if ($result && isset($result['test'])) {
                    $dbConnected = true;
                    $dbError = "✅ Conexão estabelecida com sucesso\n";
                } else {
                    $dbError = "❌ Query retornou resultado inválido\n";
                }
            } catch (PDOException $e) {
                $dbError = "❌ ERRO de conexão PDO:\n" . $e->getMessage() . "\nCódigo: " . $e->getCode();
            } catch (Throwable $e) {
                $dbError = "❌ ERRO inesperado:\n" . $e->getMessage();
            }
        } else {
            $dbError = "❌ Variável \$pdo não existe (config_db.php não carregou corretamente)";
        }
        
        if ($dbConnected) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">❌</span>';
        }
        echo '<span>Teste 4: Conexão com Banco de Dados</span>';
        echo '</div>';
        
        echo '<div class="test-details">' . htmlspecialchars($dbError) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Conexão Banco de Dados', $dbConnected, $dbError);
        
        // ============================================================
        // TESTE 5: QUERY SIMPLES (COUNT)
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $queryWorks = false;
        $queryError = '';
        $produtoCount = 0;
        
        if ($dbConnected) {
            try {
                $stmt = $pdo->query("SELECT COUNT(*) as total FROM produtos");
                $result = $stmt->fetch(PDO::FETCH_ASSOC);
                if ($result) {
                    $produtoCount = intval($result['total']);
                    $queryWorks = true;
                    $queryError = "✅ Query executada com sucesso\n";
                    $queryError .= "Total de produtos no banco: $produtoCount\n";
                }
            } catch (PDOException $e) {
                $queryError = "❌ ERRO ao executar query:\n" . $e->getMessage() . "\nSQL State: " . $e->getCode();
            } catch (Throwable $e) {
                $queryError = "❌ ERRO inesperado:\n" . $e->getMessage();
            }
        } else {
            $queryError = "❌ Não foi possível testar (sem conexão)";
        }
        
        if ($queryWorks) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">❌</span>';
        }
        echo '<span>Teste 5: Query Simples (SELECT COUNT)</span>';
        echo '</div>';
        
        echo '<div class="test-details">' . htmlspecialchars($queryError) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Query Simples', $queryWorks, $queryError);
        
        // ============================================================
        // TESTE 6: EXISTÊNCIA DA TABELA usuarios
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $tableUsuariosExists = false;
        $tableUsuariosError = '';
        
        if ($dbConnected) {
            try {
                $stmt = $pdo->query("SHOW TABLES LIKE 'usuarios'");
                $result = $stmt->fetch(PDO::FETCH_ASSOC);
                if ($result) {
                    $tableUsuariosExists = true;
                    
                    // Tentar listar colunas
                    $stmtCols = $pdo->query("SHOW COLUMNS FROM usuarios");
                    $cols = $stmtCols->fetchAll(PDO::FETCH_ASSOC);
                    
                    $tableUsuariosError = "✅ Tabela 'usuarios' existe\n";
                    $tableUsuariosError .= "Colunas encontradas: ";
                    $colNames = [];
                    foreach ($cols as $col) {
                        $colNames[] = $col['Field'];
                    }
                    $tableUsuariosError .= implode(', ', $colNames) . "\n";
                    
                    // Verificar se tem senha_hash ou senha
                    if (in_array('senha_hash', $colNames)) {
                        $tableUsuariosError .= "✅ Schema moderno detectado (senha_hash, tipo)\n";
                    } elseif (in_array('senha', $colNames)) {
                        $tableUsuariosError .= "⚠️ Schema antigo detectado (senha, nivel)\n";
                    }
                } else {
                    $tableUsuariosError = "❌ Tabela 'usuarios' NÃO existe no banco de dados\n";
                }
            } catch (PDOException $e) {
                $tableUsuariosError = "❌ ERRO ao verificar tabela:\n" . $e->getMessage();
            }
        } else {
            $tableUsuariosError = "❌ Não foi possível testar (sem conexão)";
        }
        
        if ($tableUsuariosExists) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">❌</span>';
        }
        echo '<span>Teste 6: Existência da Tabela usuarios</span>';
        echo '</div>';
        
        echo '<div class="test-details">' . htmlspecialchars($tableUsuariosError) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Tabela usuarios', $tableUsuariosExists, $tableUsuariosError);
        
        // ============================================================
        // TESTE 7: EXISTÊNCIA DA TABELA matriculas
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $tableMatriculasExists = false;
        $tableMatriculasError = '';
        
        if ($dbConnected) {
            try {
                $stmt = $pdo->query("SHOW TABLES LIKE 'matriculas'");
                $result = $stmt->fetch(PDO::FETCH_ASSOC);
                if ($result) {
                    $tableMatriculasExists = true;
                    
                    // Tentar listar colunas
                    $stmtCols = $pdo->query("SHOW COLUMNS FROM matriculas");
                    $cols = $stmtCols->fetchAll(PDO::FETCH_ASSOC);
                    
                    $tableMatriculasError = "✅ Tabela 'matriculas' existe\n";
                    $tableMatriculasError .= "Colunas encontradas: ";
                    $colNames = [];
                    foreach ($cols as $col) {
                        $colNames[] = $col['Field'];
                    }
                    $tableMatriculasError .= implode(', ', $colNames) . "\n";
                } else {
                    $tableMatriculasError = "⚠️ Tabela 'matriculas' NÃO existe (necessária apenas para area_membros)\n";
                }
            } catch (PDOException $e) {
                $tableMatriculasError = "❌ ERRO ao verificar tabela:\n" . $e->getMessage();
            }
        } else {
            $tableMatriculasError = "❌ Não foi possível testar (sem conexão)";
        }
        
        if ($tableMatriculasExists) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">⚠️</span>';
        }
        echo '<span>Teste 7: Existência da Tabela matriculas</span>';
        echo '</div>';
        
        echo '<div class="test-details">' . htmlspecialchars($tableMatriculasError) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Tabela matriculas', $tableMatriculasExists, $tableMatriculasError, !$tableMatriculasExists);
        
        // ============================================================
        // TESTE 8: SIMULAÇÃO DE BUSCA DE USUÁRIO (DRY RUN)
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $userQueryWorks = false;
        $userQueryError = '';
        
        if ($dbConnected && $tableUsuariosExists) {
            try {
                $testEmail = 'teste@teste.com';
                $stmt = $pdo->prepare("SELECT id FROM usuarios WHERE email = :email LIMIT 1");
                $stmt->execute([':email' => $testEmail]);
                $user = $stmt->fetch(PDO::FETCH_ASSOC);
                
                $userQueryWorks = true;
                $userQueryError = "✅ Query de busca de usuário executada com sucesso\n";
                $userQueryError .= "Email testado: $testEmail\n";
                if ($user) {
                    $userQueryError .= "✅ Usuário encontrado (ID: " . $user['id'] . ")\n";
                } else {
                    $userQueryError .= "ℹ️ Usuário não encontrado (esperado para email de teste)\n";
                }
            } catch (PDOException $e) {
                $userQueryError = "❌ ERRO ao executar query de usuário:\n" . $e->getMessage() . "\nSQL State: " . $e->getCode();
            } catch (Throwable $e) {
                $userQueryError = "❌ ERRO inesperado:\n" . $e->getMessage();
            }
        } else {
            $userQueryError = "❌ Não foi possível testar (sem conexão ou tabela não existe)";
        }
        
        if ($userQueryWorks) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">❌</span>';
        }
        echo '<span>Teste 8: Simulação de Busca de Usuário (Dry Run)</span>';
        echo '</div>';
        
        echo '<div class="test-details">' . htmlspecialchars($userQueryError) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'Simulação Busca Usuário', $userQueryWorks, $userQueryError);
        
        // ============================================================
        // TESTE 9: VERIFICAÇÃO DE email_config.php (OPCIONAL)
        // ============================================================
        echo '<div class="test-section">';
        echo '<div class="test-title">';
        
        $emailConfigExists = file_exists($emailConfigPath);
        $emailConfigDetails = '';
        
        if ($emailConfigExists) {
            $emailConfigDetails = "✅ Arquivo encontrado: $emailConfigPathAbsolute\n";
            $emailConfigDetails .= "Tamanho: " . filesize($emailConfigPathAbsolute) . " bytes\n";
        } else {
            $emailConfigDetails = "⚠️ Arquivo NÃO encontrado (opcional - email não será enviado se ausente)\n";
            $emailConfigDetails .= "Caminho testado: $emailConfigPath\n";
        }
        
        if ($emailConfigExists) {
            echo '<span class="status">✅</span>';
        } else {
            echo '<span class="status">⚠️</span>';
        }
        echo '<span>Teste 9: Existência de email_config.php (Opcional)</span>';
        echo '</div>';
        
        echo '<div class="test-details">' . htmlspecialchars($emailConfigDetails) . '</div>';
        echo '</div>';
        
        registerTest($results, $totalTests, $passedTests, $failedTests, $warnings, 'email_config.php', $emailConfigExists, $emailConfigDetails, !$emailConfigExists);
        
        // ============================================================
        // RESUMO FINAL
        // ============================================================
        echo '<hr>';
        echo '<div class="summary">';
        echo '<h2>📊 Resumo dos Testes</h2>';
        
        $successRate = $totalTests > 0 ? round(($passedTests / $totalTests) * 100, 1) : 0;
        
        echo '<div class="summary-item">';
        echo '<strong>Total de Testes:</strong> ' . $totalTests . '<br>';
        echo '<strong class="success-message">✅ Passou:</strong> ' . $passedTests . '<br>';
        echo '<strong class="error-message">❌ Falhou:</strong> ' . $failedTests . '<br>';
        if ($warnings > 0) {
            echo '<strong class="warning-message">⚠️ Avisos:</strong> ' . $warnings . '<br>';
        }
        echo '<strong>Taxa de Sucesso:</strong> ' . $successRate . '%<br>';
        echo '</div>';
        
        echo '<div class="summary-item" style="margin-top: 15px;">';
        echo '<strong>Status Geral:</strong><br>';
        if ($failedTests == 0 && $passedTests == $totalTests - $warnings) {
            echo '<span class="success-message">✅ Todos os testes críticos passaram! O sistema deve funcionar.</span>';
        } elseif ($failedTests > 0) {
            echo '<span class="error-message">❌ Existem erros críticos que impedem o funcionamento. Corrija os problemas acima.</span>';
        } else {
            echo '<span class="warning-message">⚠️ Sistema funcional mas com avisos. Verifique os itens marcados com ⚠️.</span>';
        }
        echo '</div>';
        
        echo '</div>';
        
        // Limpar buffer e mostrar qualquer output inesperado
        $buffer = ob_get_clean();
        if (!empty($buffer)) {
            echo '<div class="test-section error" style="margin-top: 20px;">';
            echo '<div class="test-title">';
            echo '<span class="status">⚠️</span>';
            echo '<span>Output Inesperado Capturado</span>';
            echo '</div>';
            echo '<div class="test-details">' . htmlspecialchars($buffer) . '</div>';
            echo '</div>';
        }
        ?>
        
    </div>
</body>
</html>
