<?php
declare(strict_types=1);

require_once dirname(__DIR__) . '/vendor/autoload.php';
require_once dirname(__DIR__) . '/src/functions.php';
require_once dirname(__DIR__) . '/src/session.php';

use Dotenv\Dotenv;
use App\Service\Router;
use App\Service\Database;
use App\Service\ErrorLogger;
use App\View\BaseView;

$dotenv = Dotenv::createImmutable(dirname(__DIR__));
$dotenv->load();

$production = (isset($_ENV['APP_ENV']) && $_ENV['APP_ENV'] === 'prod');

if ($production) {
    ini_set('display_errors', 0);
    ini_set('display_startup_errors', 0);
    ini_set('upload_max_filesize', '32M');
    error_reporting(0);
}
else {
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    ini_set('upload_max_filesize', '32M');
    error_reporting(E_ALL);
}

mynorion_session();

try {
    Database::getConnection();

    $router = new Router();
    require_once dirname(__DIR__) . '/config/routes.php';

    $router->dispatch($_SERVER['REQUEST_URI']);
} catch (Exception $e) {
    http_response_code(500);
    ErrorLogger::logError($e->getMessage());

    if ($production) {
        BaseView::render('pages/500');
    } else {
        echo "Server Error: " . $e->getMessage();
    }
}