<?php

declare(strict_types=1);

/**
 * TownOS — public entry point
 * All HTTP requests are routed through here via .htaccess
 */

define('BASE_PATH', dirname(__DIR__));
define('START_TIME', microtime(true));

// ── Autoloader (PSR-4: App\ → /app/) ─────────────────────────────────────────
spl_autoload_register(function (string $class): void {
    if (!str_starts_with($class, 'App\\')) {
        return;
    }

    // App\Core\TownResolver  → /app/core/TownResolver.php
    // App\Controllers\Api\X  → /app/controllers/Api/X.php
    // App\Helpers\CsrfHelper → /app/helpers/CsrfHelper.php
    $relative = substr($class, 4); // strip "App\"
    $parts    = explode('\\', $relative);
    $dir      = strtolower(array_shift($parts)); // Core → core
    $file     = BASE_PATH . '/app/' . $dir . '/' . implode('/', $parts) . '.php';

    if (file_exists($file)) {
        require_once $file;
    }
});

// ── Load environment ──────────────────────────────────────────────────────────
require_once BASE_PATH . '/app/core/EnvLoader.php';
loadEnv(BASE_PATH . '/.env');

// ── Error reporting ───────────────────────────────────────────────────────────
$debug = filter_var($_ENV['APP_DEBUG'] ?? false, FILTER_VALIDATE_BOOLEAN);
if ($debug) {
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
} else {
    error_reporting(0);
    ini_set('display_errors', '0');
    ini_set('log_errors', '1');
    ini_set('error_log', BASE_PATH . '/storage/logs/php_errors.log');
}

// ── Session ───────────────────────────────────────────────────────────────────
ini_set('session.save_path', BASE_PATH . '/storage/sessions');
ini_set('session.cookie_httponly', '1');
ini_set('session.use_strict_mode', '1');
ini_set('session.cookie_samesite', 'Lax');
if (!$debug && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
    ini_set('session.cookie_secure', '1');
}
session_start();

// ── Resolve current town ──────────────────────────────────────────────────────
$townResolver = new \App\Core\TownResolver();
$town = $townResolver->resolve();

// ── Router ─────────────────────────────────────────────────────────────────
$router = new \App\Core\Router();
require_once BASE_PATH . '/app/routes.php';
$router->dispatch();
