<?php

require_once dirname(__DIR__) . '/vendor/autoload.php';
require_once dirname(__DIR__) . '/helpers/Env.php';

// Load environment variables
Env::load(dirname(__DIR__) . '/.env');

require_once dirname(__DIR__) . '/config/app.php';
require_once APP_ROOT . '/config/database.php';
require_once APP_ROOT . '/helpers/Session.php';
require_once APP_ROOT . '/helpers/Router.php';
require_once APP_ROOT . '/helpers/Lang.php';
require_once APP_ROOT . '/helpers/Validator.php';
require_once APP_ROOT . '/helpers/FileUpload.php';
require_once APP_ROOT . '/helpers/Recaptcha.php';
require_once APP_ROOT . '/helpers/Security.php';
require_once APP_ROOT . '/helpers/Debug.php';
require_once APP_ROOT . '/helpers/Schema.php';

// Redirect legacy static asset URLs before starting a PHP session.
$earlyMethod = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$earlyUri = trim(parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH) ?: '', '/');
if ($earlyMethod === 'GET') {
    $legacyStaticRedirects = [
        'images/og-image.jpg' => '/images/articles/2026/04/numismatics-notaphily-the-world-of-coins-3e15af-og.jpg',
        'images/placeholder-image.png' => '/images/placeholder-image.svg',
        'favicon-16x16.png' => '/favicon.ico',
        'favicon-32x32.png' => '/favicon.ico',
        'apple-touch-icon.png' => '/favicon.ico',
    ];

    if (isset($legacyStaticRedirects[$earlyUri])) {
        http_response_code(301);
        header('Location: ' . APP_URL . $legacyStaticRedirects[$earlyUri]);
        exit;
    }
}

Session::start();
Lang::init();

// Set security headers
Security::setSecurityHeaders();

// Serve static files directly when using PHP built-in server
if (php_sapi_name() === 'cli-server') {
    $requestFile = __DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    if (is_file($requestFile)) {
        return false;
    }
}

$method = $_SERVER['REQUEST_METHOD'];
$uri    = $_GET['url'] ?? '';

// Fallback: parse URI from REQUEST_URI if .htaccess rewrite not active
if (empty($uri)) {
    $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $uri = trim($uri, '/');
}

$uri = filter_var($uri, FILTER_SANITIZE_URL);

if (APP_DEBUG) {
    error_log("Index: Method=$method, URI='$uri', REQUEST_URI='{$_SERVER['REQUEST_URI']}'");
}

$router = new Router();
$router->dispatch($method, $uri);
