<?php

declare(strict_types=1);

/**
 * cPanel entry point when Document Root is locked to public_html.
 *
 * Expected layout:
 *   /home/USERNAME/uofashir_system/   ← app, config, vendor, storage, .env
 *   /home/USERNAME/public_html/       ← this file + assets + uploads (+ reg/, student/, …)
 *
 * If your app folder name differs, change ROOT_PATH below only.
 */

use App\Core\App;
use App\Core\ErrorHandler;
use App\Core\Session;

define('ROOT_PATH', dirname(__DIR__) . '/uofashir_system');
define('APP_PATH', ROOT_PATH . '/app');
define('CONFIG_PATH', ROOT_PATH . '/config');
define('STORAGE_PATH', ROOT_PATH . '/storage');
define('PUBLIC_PATH', __DIR__);

if (!is_dir(APP_PATH)) {
    http_response_code(500);
    header('Content-Type: text/plain; charset=UTF-8');
    exit('Application path not found. Upload the system to /uofashir_system next to public_html.');
}

require APP_PATH . '/bootstrap/env.php';
load_env(ROOT_PATH . '/.env');

spl_autoload_register(static function (string $class): void {
    $prefix = 'App\\';
    $baseDir = APP_PATH . '/';

    if (!str_starts_with($class, $prefix)) {
        return;
    }

    $relativeClass = substr($class, strlen($prefix));
    $file = $baseDir . str_replace('\\', '/', $relativeClass) . '.php';

    if (file_exists($file)) {
        require $file;
    }
});

require APP_PATH . '/Helpers/functions.php';
require APP_PATH . '/Helpers/admin.php';
require APP_PATH . '/Helpers/portal.php';
require APP_PATH . '/Helpers/cms.php';
require APP_PATH . '/Helpers/website.php';

\App\Support\AuthorSeal::guard();

ErrorHandler::register();

$composerAutoload = ROOT_PATH . '/vendor/autoload.php';
if (is_file($composerAutoload)) {
    require $composerAutoload;
}

Session::start();

$app = new App();
$app->run();
