<?php
/**
 * Bootstrap File
 *
 * Carga y configura todos los componentes esenciales de la aplicación.
 */

// Iniciar sesión si no está iniciada
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// Habilitar logging de errores
ini_set('display_errors', 0); // No mostrar errores al usuario
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/../logs/php_errors.log'); // Ruta centralizada

// Cargar variables de entorno
if (file_exists(__DIR__ . '/../.env')) {
    $lines = file(__DIR__ . '/../.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    foreach ($lines as $line) {
        if (strpos(trim($line), '#') === 0) continue;
        if (strpos($line, '=') === false) continue;
        list($key, $value) = explode('=', $line, 2);
        $_ENV[trim($key)] = trim($value);
    }
}

// 1. Cargar la conexión a la base de datos
require_once __DIR__ . '/database/connection.php';

// 2. Cargar el helper de autenticación JWT
require_once __DIR__ . '/auth/jwt.php';

// 3. Cargar helpers generales (que ahora pueden asumir que la DB y JWT existen)
require_once __DIR__ . '/utils/helpers.php';

// 4. Realizar la autenticación y obtener los datos del usuario
// Esto se hace una sola vez y los datos se guardan en la clase JWTAuth
try {
    $userData = JWTAuth::requireAuth();
} catch (Exception $e) {
    // Si la autenticación falla, redirigir al login
    // Esto es más seguro que mostrar un 'die()', ya que no expone la estructura de archivos.
    header('Location: /login.php');
    exit;
}

// 5. Cargar el gestor de traducciones (que depende de los datos del usuario para el idioma)
require_once __DIR__ . '/translations/manager.php';
