<?php

openlog ('hedera-web', LOG_ODELAY, LOG_LOCAL0);

require_once ('vn/hedera/web.php');
require_once ('vn/hedera/js.php');
require_once ('vn/hedera/util.php');

use Vn\Hedera\Web;
use Vn\Lib\Locale;

function myExitHandler ()
{
	Web::deinit ();
	closelog ();
}

function myGlobalErrorHandler ()
{
	header ('Location: unavailable.html');
	myExitHandler ();
	exit (0);
}

function myErrorHandler ($errno, $message, $file, $line, $context)
{
	error_log ("Error: $file($line): $message");

	switch ($errno)
	{
		case E_USER_ERROR:
			myGlobalErrorHandler ();
	}
	
	return TRUE;
}

function myExceptionHandler ($e)
{
	error_log (sprintf ('Exception: %s(%d): %s. Trace: %s'
		,$e->getFile ()
		,$e->getLine ()
		,$e->getMessage ()
		,$e->getTraceAsString ()
	));
	myGlobalErrorHandler ();
}

set_error_handler ('myErrorHandler', E_ALL);
set_exception_handler ('myExceptionHandler');

Web::sysInit ();

if (!Web::isHttps () && Web::$sysConn->getValue ('SELECT https FROM config'))
{
	header ("Location: https://${_SERVER['SERVER_NAME']}${_SERVER['REQUEST_URI']}");
	exit (0);
}

Web::init ();

// Getting the requested page

if (isset ($_GET['page']) && Vn\Hedera\checkToken ($_GET['page']))
	$page = $_GET['page'];
else
	$page = 'login';

// Checking the browser version

if (!isset ($_SESSION['skipBrowser']) && $page != 'update-browser')
{
	$updateBrowser = FALSE;

    if (!isset ($_GET['skipBrowser'])
	&& ($browser = get_browser ($_SERVER['HTTP_USER_AGENT'])))
	{
		$browserVersion = $browser->version;
		set_type ($browserVersion, TYPE_DOUBLE);

		$minVersion = Web::$sysConn->getValue (
			'SELECT version FROM browser WHERE name = #', [$browser->browser]);

		$updateBrowser = $browserVersion > 0
		    && isset ($minVersion) && $browserVersion < $minVersion;
	}

	if ($updateBrowser)
	{
		header ('Location: ?page=update-browser');
		exit (0);
	}
	else
		$_SESSION['skipBrowser'] = TRUE;
}

// If enabled, requests the user to choose between two web versions

if (FALSE && !isset ($_SESSION['skipVersionMenu']) && $page != 'version-menu')
{
	$_SESSION['skipVersionMenu'] = TRUE;
	header ('Location: ?page=version-menu');
}

// Setting the version

setcookie ('hedera_version', Web::getVersion ());

// Loading the requested page

$basePath = 'pages/'. $page;

header ('Content-Type: text/html; charset=utf-8');

if (file_exists ($basePath))
{
	Locale::addPath ($basePath);

	$phpFile = $basePath .'/'. $page .'.php';

	if (file_exists ($phpFile))
		require ($phpFile);

	require ($basePath .'/html.php');
}

myExitHandler ();

?>