<?php
// admin/erro.php

// Ativa a exibição de erros
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

echo "<h2>Diagnóstico de Erros</h2>";

// 1. Verifica includes
echo "<h3>1. Verificando includes:</h3>";
$includes = [
    '../includes/config.php',
    '../includes/db.php',
    '../includes/functions.php',
    '../includes/auth.php',
    'inc/header.php',
    'inc/footer.php'
];

foreach ($includes as $file) {
    echo "Arquivo {$file}: " . (file_exists($file) ? "✅ Existe" : "❌ Não existe") . "<br>";
}

// 2. Verifica sessão
echo "<h3>2. Status da Sessão:</h3>";
echo "Session Status: " . session_status() . "<br>";
echo "Session ID: " . session_id() . "<br>";
echo "<pre>SESSION: ";
print_r($_SESSION);
echo "</pre>";

// 3. Testa conexão com banco
echo "<h3>3. Teste de Conexão com Banco:</h3>";
try {
    require_once '../includes/config.php';
    echo "✅ config.php carregado<br>";
    
    require_once '../includes/db.php';
    echo "✅ db.php carregado<br>";
    
    // Testa conexão
    $db->query("SELECT 1");
    echo "✅ Conexão com banco estabelecida<br>";
    
    // Lista tabelas
    echo "<h4>Tabelas existentes:</h4>";
    $db->query("SHOW TABLES");
    $tables = $db->resultSet();
    echo "<pre>";
    print_r($tables);
    echo "</pre>";
    
} catch (Exception $e) {
    echo "❌ Erro na conexão: " . $e->getMessage() . "<br>";
    echo "<pre>Stack trace:\n" . $e->getTraceAsString() . "</pre>";
}

// 4. Verifica estrutura das tabelas
echo "<h3>4. Estrutura das Tabelas:</h3>";

try {
    // Tabela admins
    echo "<h4>Tabela admins:</h4>";
    $db->query("DESCRIBE admins");
    echo "<pre>";
    print_r($db->resultSet());
    echo "</pre>";
    
    // Tabela pages
    echo "<h4>Tabela pages:</h4>";
    $db->query("DESCRIBE pages");
    echo "<pre>";
    print_r($db->resultSet());
    echo "</pre>";
    
} catch (Exception $e) {
    echo "❌ Erro ao verificar estrutura: " . $e->getMessage() . "<br>";
}

// 5. Verifica permissões de diretório
echo "<h3>5. Permissões de Diretório:</h3>";
$directories = [
    '../includes',
    'inc',
    '../uploads',
    '../logs'
];

foreach ($directories as $dir) {
    if (file_exists($dir)) {
        echo "{$dir}: ✅ Existe (Permissões: " . decoct(fileperms($dir) & 0777) . ")<br>";
        echo "Gravável: " . (is_writable($dir) ? "Sim" : "Não") . "<br>";
    } else {
        echo "{$dir}: ❌ Não existe<br>";
    }
}

// 6. Informações do PHP
echo "<h3>6. Informações do Ambiente:</h3>";
echo "<pre>";
echo "PHP Version: " . phpversion() . "\n";
echo "Server Software: " . $_SERVER['SERVER_SOFTWARE'] . "\n";
echo "Document Root: " . $_SERVER['DOCUMENT_ROOT'] . "\n";
echo "Current Script: " . $_SERVER['SCRIPT_FILENAME'] . "\n";
echo "</pre>";

// 7. Teste de carregamento do index.php
echo "<h3>7. Teste de Carregamento do index.php:</h3>";
try {
    // Tenta incluir o index.php em um buffer de saída
    ob_start();
    require_once 'index.php';
    ob_end_clean();
    echo "✅ index.php carregado sem erros<br>";
} catch (Throwable $e) {
    echo "❌ Erro no index.php:<br>";
    echo "Mensagem: " . $e->getMessage() . "<br>";
    echo "Arquivo: " . $e->getFile() . "<br>";
    echo "Linha: " . $e->getLine() . "<br>";
    echo "<pre>Stack trace:\n" . $e->getTraceAsString() . "</pre>";
}

// 8. Log de erros do PHP
echo "<h3>8. Últimos Erros do PHP:</h3>";
$errorLog = ini_get('error_log');
if (file_exists($errorLog)) {
    echo "<pre>";
    echo tail($errorLog, 10);
    echo "</pre>";
} else {
    echo "Arquivo de log não encontrado em: " . $errorLog;
}

// Função auxiliar para ler últimas linhas do arquivo
function tail($filename, $lines = 10) {
    if (!file_exists($filename)) return "File not found";
    $file = file($filename);
    if (count($file) < $lines) return implode("", $file);
    return implode("", array_slice($file, -$lines));
}

// Estilo para melhor visualização
?>
<style>
    body {
        font-family: Arial, sans-serif;
        line-height: 1.6;
        margin: 20px;
        background: #f5f5f5;
    }
    h2 {
        color: #333;
        border-bottom: 2px solid #333;
        padding-bottom: 10px;
    }
    h3 {
        color: #666;
        margin-top: 20px;
        background: #fff;
        padding: 10px;
        border-radius: 5px;
        box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    }
    h4 {
        color: #444;
        margin-top: 15px;
    }
    pre {
        background: #fff;
        padding: 10px;
        border-radius: 5px;
        overflow: auto;
        box-shadow: inset 0 0 5px rgba(0,0,0,0.1);
    }
    .error {
        color: #dc3545;
        background: #ffe6e6;
        padding: 10px;
        border-radius: 5px;
        margin: 10px 0;
    }
    .success {
        color: #28a745;
        background: #e6ffe6;
        padding: 10px;
        border-radius: 5px;
        margin: 10px 0;
    }
</style>