<?php
// ErrorHandler initialization is done after config/autoload.

ini_set('session.use_strict_mode', '1');
ini_set('session.use_only_cookies', '1');
ini_set('session.cookie_httponly', '1');

$isSecure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
	|| (isset($_SERVER['SERVER_PORT']) && (int) $_SERVER['SERVER_PORT'] === 443);

session_set_cookie_params([
	'lifetime' => 0,
	'path' => '/',
	'domain' => '',
	'secure' => $isSecure,
	'httponly' => true,
	'samesite' => 'Lax',
]);

session_start();

define('INDEX_LOAD', 1);

//header('Content-Type: text/html; charset=ISO-8859-1');
header('Content-Type: text/html; charset=utf-8');

$config = require __DIR__ . '/classes/config.php';
if (!defined('MYSQL_SERVER')) {
	define('MYSQL_SERVER', $config['db']['host']);
}
if (!defined('MYSQL_DATABASE')) {
	define('MYSQL_DATABASE', $config['db']['database']);
}
if (!defined('MYSQL_USER')) {
	define('MYSQL_USER', $config['db']['user']);
}
if (!defined('MYSQL_PWD')) {
	define('MYSQL_PWD', $config['db']['password']);
}
if (!defined('STANDARD_SESSION')) {
	define('STANDARD_SESSION', $config['session']['standard']);
}
if (!defined('LOGIN_TIMEOUT')) {
	define('LOGIN_TIMEOUT', $config['session']['timeout']);
}
if (!defined('DEBUG_ACTIVE')) {
	define('DEBUG_ACTIVE', $config['debug']['active']);
}

spl_autoload_register(function ($class) {
	$base = __DIR__ . '/classes/';
	$normalized = ltrim($class, '_');
	$candidates = [
		$base . $class . '.php',
		$base . $normalized . '.php',
		$base . strtolower($class) . '.php',
		$base . strtolower($normalized) . '.php',
	];
	foreach ($candidates as $file) {
		if (file_exists($file)) {
			require_once $file;
			return;
		}
	}
});

ErrorHandler::init((bool) DEBUG_ACTIVE);
require_once 'set.php';
require_once 'classes/debug.php';
require_once 'classes/message.php';
require_once 'classes/reload.php';
require_once 'classes/mysql.php';
require_once 'classes/request.php';
require_once 'classes/csrf.php';
require_once 'classes/form.php';
require_once 'classes/login.php';
require_once 'classes/confirms.php';
require_once 'classes/print_list.php';
require_once 'classes/print_release.php';

ServiceContainer::set('config', $config);
ServiceContainer::set('db', $db);

require_once __DIR__ . '/vendor/autoload.php';
use Dompdf\Dompdf;

$dompdf = new Dompdf();

// Check Login User
if (!$user->isLogin() && _REQUEST::get('view') != 'user')
	_RELOAD::set('index.php?view=user');

$view = _REQUEST::get('view', 'editlist');
$layout = _REQUEST::get('layout', 'default');
$session = _REQUEST::get('session', STANDARD_SESSION);

ob_start();

$router = new Router(__DIR__ . '/frontend');
$routes = require __DIR__ . '/app/routes.php';
if (is_array($routes)) {
	foreach ($routes as $viewKey => $layouts) {
		if (!is_array($layouts)) {
			continue;
		}
		foreach ($layouts as $layoutKey => $file) {
			$router->add($viewKey, $layoutKey, $file);
		}
	}
}
$require = $router->dispatch($view, $layout);


require $require;
$content = ob_get_contents();
if (_REQUEST::get('template', '') == 'contentonly') {
	ob_end_clean();
	echo $content;
	exit;
}

if (strpos($require, __DIR__ . '/app/') === 0) {
	ob_end_clean();
	echo $content;
	exit;
}
ob_end_clean();

?>
