<?php
/**
 * public/acceso/session_boot.php
 * Motor de Seguridad, Cifrado de URLs y Bootstrap de Sesión Universal Multi-País para Cyfort Access Pro.
 */
declare(strict_types=1);

if (!headers_sent()) {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE');
    header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With, User-Agent, Accept, X-App-Client, X-Api-Key');
    header('X-Frame-Options: SAMEORIGIN');
    header('X-Content-Type-Options: nosniff');
    header('X-XSS-Protection: 1; mode=block');
    header('Referrer-Policy: strict-origin-when-cross-origin');
}

if (strtoupper($_SERVER['REQUEST_METHOD'] ?? '') === 'OPTIONS') {
    http_response_code(200);
    exit;
}

if (session_status() === PHP_SESSION_NONE) {
    ini_set('session.use_strict_mode', '0');
    ini_set('session.cookie_httponly', '1');
    ini_set('session.use_only_cookies', '1');
    ini_set('session.cookie_samesite', 'Lax');
    session_name('CYFORT_ACCESO_SESS');
    session_set_cookie_params([
        'path'     => '/',
        'httponly' => true,
        'samesite' => 'Lax',
        'secure'   => (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'),
    ]);
    session_start();
}

// Cargar motor de cifrado de URLs si está disponible
$urlCipherPath = __DIR__ . '/../../config/url_cipher.php';
if (file_exists($urlCipherPath)) {
    require_once $urlCipherPath;
}

/**
 * Verificar requerimiento de autenticación para páginas web protegidas
 */
if (!function_exists('acceso_require_auth')) {
    function acceso_require_auth(): array {
        if (!empty($_SESSION['acceso_user'])) {
            return $_SESSION['acceso_user'];
        }
        
        // Auto-provisionar usuario por defecto si es entorno local o petición autorizada
        if (!empty($_SESSION['user'])) {
            $_SESSION['acceso_user'] = $_SESSION['user'];
            return $_SESSION['acceso_user'];
        }

        // Redirigir a inicio de sesión seguro
        header('Location: login.php');
        exit;
    }
}

/**
 * Función helper para desinfectar salidas HTML
 */
if (!function_exists('acceso_e')) {
    function acceso_e(string $str): string {
        return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
    }
}
