<?php
// page.php - Controlador para exibir páginas com base no slug

// Define o caminho base se não estiver definido
if (!defined('BASE_PATH')) {
    define('BASE_PATH', dirname(__FILE__));
}

// Configurações iniciais
require_once BASE_PATH . '/includes/config.php';
require_once BASE_PATH . '/includes/db.php';
require_once BASE_PATH . '/includes/functions.php';

// Obtém o slug da URL
$slug = isset($_GET['slug']) ? trim($_GET['slug']) : '';

// Análise da URL para detectar slug direto
if (empty($slug)) {
    $requestUri = $_SERVER['REQUEST_URI'];
    $parsedUrl = parse_url($requestUri);
    $path = trim($parsedUrl['path'], '/');
    
    // Lista de arquivos/diretórios excluídos
    $excludedPaths = [
        'admin', 'api', 'assets', 'css', 'js', 'images', 'uploads',
        'redirect.php', 'test-redirect.php', 'index.php', 'page.php',
        'login.php', 'logout.php', 'admin.php'
    ];
    
    // Se não está vazio, não é um arquivo PHP e não é uma página especial, considera como slug
    if (!empty($path) && 
        !preg_match('/\.php$/i', $path) && 
        !in_array($path, $excludedPaths)) {
        $slug = $path;
    }
}

// Se não tiver slug, redireciona para a home
if (empty($slug)) {
    redirect('index.php');
    exit;
}

// Log do acesso (para debug)
logInfo("Acesso à página: slug=$slug, URI=" . $_SERVER['REQUEST_URI']);

// Função para mostrar página 404
function show404Page() {
    header("HTTP/1.0 404 Not Found");
    
    // Verifica se existe arquivo 404 personalizado
    if (file_exists(BASE_PATH . '/404.php')) {
        include(BASE_PATH . '/404.php');
    } elseif (file_exists(BASE_PATH . '/pages/404.php')) {
        include(BASE_PATH . '/pages/404.php');
    } else {
        // Fallback padrão
        ?>
        <!DOCTYPE html>
        <html lang="pt-BR">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Página não encontrada - 404</title>
            <style>
                body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
                h1 { color: #e74c3c; }
                p { color: #7f8c8d; margin: 20px 0; }
                a { color: #3498db; text-decoration: none; }
                a:hover { text-decoration: underline; }
            </style>
        </head>
        <body>
            <h1>404 - Página não encontrada</h1>
            <p>A página que você está procurando não existe ou foi removida.</p>
            <p><a href="/">← Voltar para a página inicial</a></p>
        </body>
        </html>
        <?php
    }
}

// Função para mostrar página de erro 500
function show500Page($errorMessage = '') {
    header("HTTP/1.0 500 Internal Server Error");
    
    // Verifica se existe arquivo 500 personalizado
    if (file_exists(BASE_PATH . '/500.php')) {
        include(BASE_PATH . '/500.php');
    } elseif (file_exists(BASE_PATH . '/pages/500.php')) {
        include(BASE_PATH . '/pages/500.php');
    } else {
        // Fallback padrão
        ?>
        <!DOCTYPE html>
        <html lang="pt-BR">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Erro interno - 500</title>
            <style>
                body { font-family: Arial, sans-serif; text-align: center; padding: 50px; }
                h1 { color: #e74c3c; }
                p { color: #7f8c8d; margin: 20px 0; }
                a { color: #3498db; text-decoration: none; }
                a:hover { text-decoration: underline; }
                .error-details { background: #f8f9fa; padding: 15px; margin: 20px auto; max-width: 600px; border-radius: 5px; }
            </style>
        </head>
        <body>
            <h1>500 - Erro interno do servidor</h1>
            <p>Ocorreu um erro inesperado ao processar sua solicitação.</p>
            <?php if (!empty($errorMessage) && defined('DEBUG') && DEBUG): ?>
                <div class="error-details">
                    <strong>Detalhes do erro:</strong><br>
                    <?php echo htmlspecialchars($errorMessage); ?>
                </div>
            <?php endif; ?>
            <p><a href="/">← Voltar para a página inicial</a></p>
        </body>
        </html>
        <?php
    }
}

// Busca a página pelo banco de dados usando o slug
try {
    // Busca qualquer página publicada com o slug fornecido
    $db->query("SELECT * FROM pages WHERE slug = :slug AND published = 1");
    $db->bind(':slug', $slug);
    $page = $db->single();
    
    // Se a página não existir, retorna 404
    if (!$page) {
        logError("Página não encontrada: slug=$slug");
        show404Page();
        exit;
    }
    
    logInfo("Página encontrada: ID={$page['id']}, tipo={$page['type']}, título={$page['title']}");
    
    // Se a página não for landing, busca informações da landing pai
    if ($page['type'] !== 'landing' && !empty($page['landing_page_id'])) {
        $db->query("SELECT * FROM pages WHERE id = :id AND type = 'landing' AND published = 1");
        $db->bind(':id', $page['landing_page_id']);
        $landingPage = $db->single();
        
        if ($landingPage) {
            $page['landing_slug'] = $landingPage['slug'];
            $page['landing_title'] = $landingPage['title'];
        }
    }
    
    // Registra a visualização
    try {
        $visitorIp = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'unknown';
        
        $db->query("INSERT INTO page_views (page_id, visitor_ip, user_agent) 
                    VALUES (:page_id, :visitor_ip, :user_agent)");
        $db->bind(':page_id', $page['id']);
        $db->bind(':visitor_ip', $visitorIp);
        $db->bind(':user_agent', $userAgent);
        $db->execute();
    } catch (Exception $e) {
        // Log do erro de visualização, mas não para a execução
        logError("Erro ao registrar visualização: " . $e->getMessage());
    }
    
    // Define variáveis comuns para todos os templates
    $pageType = $page['type'];
    $pageId = $page['id'];
    $landingId = $page['type'] === 'landing' ? $page['id'] : ($page['landing_page_id'] ?? null);
    
    // Busca todas as páginas do funil para navegação
    $funnelPages = [];
    if ($landingId) {
        $funnelPages = getFunnelPagesByLandingId($landingId);
    }
    
    // Função para gerar URLs das páginas do funil
    function getFunnelUrl($type) {
        global $funnelPages;
        if (isset($funnelPages[$type])) {
            return '/' . $funnelPages[$type]['slug'];
        }
        return '#';
    }
    
    // Define próxima e anterior página no fluxo
    switch($pageType) {
        case 'landing':
            $nextPageUrl = getFunnelUrl('step1');
            $prevPageUrl = '#';
            break;
        case 'step1':
            $nextPageUrl = getFunnelUrl('step2');
            $prevPageUrl = getFunnelUrl('landing');
            break;
        case 'step2':
            $nextPageUrl = getFunnelUrl('step3');
            $prevPageUrl = getFunnelUrl('step1');
            break;
        case 'step3':
            $nextPageUrl = getFunnelUrl('registration');
            $prevPageUrl = getFunnelUrl('step2');
            break;
        case 'registration':
            $nextPageUrl = '#';
            $prevPageUrl = getFunnelUrl('step3');
            break;
        default:
            $nextPageUrl = '#';
            $prevPageUrl = '#';
    }
    
    // Carrega o template adequado baseado no tipo de página
    $templatePath = '';
    switch($page['type']) {
        case 'landing':
            $templatePath = BASE_PATH . '/pages/landing.php';
            break;
        case 'step1':
            $templatePath = BASE_PATH . '/pages/step1.php';
            break;
        case 'step2':
            $templatePath = BASE_PATH . '/pages/step2.php';
            break;
        case 'step3':
            $templatePath = BASE_PATH . '/pages/step3.php';
            break;
        case 'registration':
            $templatePath = BASE_PATH . '/pages/registration.php';
            break;
        default:
            $templatePath = BASE_PATH . '/pages/default.php';
            break;
    }
    
    // Verifica se o template existe antes de incluí-lo
    if (file_exists($templatePath)) {
        include($templatePath);
    } else {
        // Template não encontrado
        throw new Exception("Template não encontrado: " . $templatePath);
    }
    
} catch (Exception $e) {
    // Log do erro
    logError("Erro ao carregar página: " . $e->getMessage());
    
    // Mostra página de erro 500
    show500Page($e->getMessage());
    exit;
}
?>