<?php
// redirect.php - Sistema de redirecionamento com logs aprimorados

// 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';

// Log detalhado para debug
function logRedirectDebug($message) {
    $timestamp = date('Y-m-d H:i:s');
    $logMessage = "[REDIRECT-DEBUG] $timestamp - $message\n";
    error_log($logMessage);
}

// Log da tentativa de redirecionamento
logRedirectDebug("Início do redirecionamento. URI: " . $_SERVER['REQUEST_URI']);

// Obtém parâmetros da URL
$pageType = isset($_GET['type']) ? trim($_GET['type']) : '';
$landingId = isset($_GET['landing']) ? (int)$_GET['landing'] : 0;

logRedirectDebug("Parâmetros recebidos - Type: $pageType, Landing: $landingId");

// Verifica se os parâmetros são válidos
if (empty($pageType) || $landingId <= 0) {
    logRedirectDebug("Parâmetros inválidos!");
    logError("Parâmetros inválidos para redirecionamento: type=$pageType, landing=$landingId");
    header("Location: /", true, 301);
    exit;
}

// Valida o tipo de página
$validTypes = ['landing', 'step1', 'step2', 'step3', 'registration'];
if (!in_array($pageType, $validTypes)) {
    logRedirectDebug("Tipo de página inválido: $pageType");
    logError("Tipo de página inválido: $pageType");
    header("Location: /", true, 301);
    exit;
}

try {
    $slug = null;
    
    if ($pageType === 'landing') {
        logRedirectDebug("Buscando landing com ID: $landingId");
        // Para landing, busca diretamente pelo ID
        $db->query("SELECT slug FROM pages WHERE id = :id AND type = 'landing' AND published = 1");
        $db->bind(':id', $landingId);
        $result = $db->single();
        
        if ($result) {
            $slug = $result['slug'];
            logRedirectDebug("Landing encontrada com slug: $slug");
        } else {
            logRedirectDebug("Landing não encontrada!");
        }
    } else {
        logRedirectDebug("Buscando $pageType com landing_page_id: $landingId");
        // Para outros tipos, busca pela landing_page_id e tipo
        $db->query("SELECT slug FROM pages WHERE landing_page_id = :landing_page_id AND type = :type AND published = 1");
        $db->bind(':landing_page_id', $landingId);
        $db->bind(':type', $pageType);
        $result = $db->single();
        
        if ($result) {
            $slug = $result['slug'];
            logRedirectDebug("Página $pageType encontrada com slug: $slug");
        } else {
            logRedirectDebug("Página $pageType não encontrada para landing_page_id: $landingId");
        }
    }
    
    if ($slug) {
        // URL de destino
        $targetUrl = '/' . $slug;
        
        // Preserva outros parâmetros de query (exceto 'type' e 'landing')
        $queryParams = $_GET;
        unset($queryParams['type']);
        unset($queryParams['landing']);
        
        if (!empty($queryParams)) {
            $targetUrl .= '?' . http_build_query($queryParams);
        }
        
        // Log do redirecionamento bem-sucedido
        $originalUrl = $_SERVER['REQUEST_URI'];
        logRedirectDebug("SUCESSO! Redirecionando: $originalUrl -> $targetUrl");
        logInfo("Redirecionamento bem-sucedido: $originalUrl -> $targetUrl");
        
        // Registra no log de redirecionamentos (se a tabela existir)
        logRedirect($originalUrl, $targetUrl, $_SERVER['HTTP_USER_AGENT'] ?? '');
        
        // Redireciona permanentemente
        header("Location: $targetUrl", true, 301);
        exit;
    } else {
        logRedirectDebug("ERRO! Slug não encontrado");
        logError("Slug não encontrado para: type=$pageType, landing=$landingId");
        
        // Se não encontrou o slug, redireciona para home
        header("Location: /", true, 301);
        exit;
    }
    
} catch (Exception $e) {
    logRedirectDebug("EXCEÇÃO! " . $e->getMessage());
    logError("Erro durante redirecionamento: " . $e->getMessage());
    header("Location: /", true, 301);
    exit;
}
?>