<?php

declare(strict_types=1);
session_set_cookie_params(["secure" => "true"]);
session_start();
date_default_timezone_set('Europe/Prague');
define('WEBROOT', dirname(realpath(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT'))));
define('PUBLIC_ROOT', realpath(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT')));
define('SEED', 7);

require WEBROOT . '/vendor/autoload.php';
require WEBROOT . '/functions.php';

use models\Model;
use src\class\Flash;
use src\class\Router;
use src\class\Language;
use controllers\NewsController;
use errors\FormValidationError;

define('LINKS', Model::retrieveConstant('routes'));
loadEnv();
$uri = requestedPath();
//*INFO $_POST['_method'] pro případ kdy bude potřeba patch, put, delete
$method = $_POST['_method'] ?? $_SERVER['REQUEST_METHOD'];

if (strtoupper($method) == 'GET') {
    if (!isset($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    if (strpos($uri, '/api/') !== 0) {
        if (strpos($uri, '/en/') === 0) {
            Language::setlang('en');
        } else if (strpos($uri, '/sk/') === 0) {
            Language::setlang('sk');
        } else {
            Language::setlang('cs');
        }
        NewsController::check();
    }
}
new Language();

require WEBROOT . '/routes.php';

try {
    Router::route($uri, $method);
} catch (FormValidationError $e) {
    $e->log();
    Flash::put('errors', $e->errors);
    Flash::put('old', $e->old);
    Router::back($e->site);
} catch (Throwable $e) {
    error_log('Throwable Caught - File: ' . $e->getFile() . ' (' . $e->getLine() . '): ' . $e->getMessage() . '. StackTrace: ' . $e->getTraceAsString());
    abort(500);
}
cleanUp();
