<?php
require __DIR__ . '/../../vendor/autoload.php';

// Configurar sesión compartida con el admin
$host = $_SERVER['HTTP_HOST'] ?? '';
$isLocalhost = in_array($host, ['localhost', '127.0.0.1', '::1']) || strpos($host, 'localhost') !== false;

// IMPORTANTE: Mismo nombre de sesión que en el admin
session_name('LOCALES_SESSION');

if (!$isLocalhost) {
    $rootDomain = preg_replace('/^(admin\.|www\.)/', '.', $host);
    if (strpos($rootDomain, '.') === 0 && substr_count($rootDomain, '.') >= 2) {
        session_set_cookie_params([
            'lifetime' => 0,
            'path' => '/',
            'domain' => $rootDomain,
            'secure' => false,
            'httponly' => true,
            'samesite' => 'Lax'
        ]);
    }
}

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

use Slim\Factory\AppFactory;
use DI\Container;
use Frontend\Middleware\DebugBarMiddleware;
use Frontend\Middleware\TimingMiddleware;
use Frontend\Handlers\ErrorHandler;
use App\Helpers\DomainHelper;

// Crear contenedor
$container = new Container();
AppFactory::setContainer($container);

// Crear app
$app = AppFactory::create();

// Middleware para parsear body
$app->addBodyParsingMiddleware();

// Debug Middlewares (solo para localhost/desarrollo)
$isLocalhost = in_array($_SERVER['REMOTE_ADDR'] ?? '', ['127.0.0.1', '::1'])
    || strpos($_SERVER['HTTP_HOST'] ?? '', 'localhost') !== false;

if ($isLocalhost && DomainHelper::isCurrentIpWhitelisted()) {
    $app->add(new DebugBarMiddleware());
    $app->add(new TimingMiddleware());
}

error_reporting(E_ALL ^ E_NOTICE);

// Cargar rutas (DEBE IR ANTES del middleware de ruteo)
$routes = require __DIR__ . '/../../frontend/src/routes.php';
$routes($app);

// Agregar ruteo
$app->addRoutingMiddleware();

// Error handling con custom handler
// IMPORTANTE: displayErrorDetails DEBE ser false para que el custom handler se ejecute
// El custom handler (ErrorHandler) decide internamente si mostrar detalles o página bonita
$errorMiddleware = $app->addErrorMiddleware(false, true, true);

// Registrar el custom error handler para páginas bonitas
$errorHandler = new ErrorHandler();
$errorMiddleware->setDefaultErrorHandler($errorHandler);

// Ejecutar app
$app->run();