<?php

namespace Vn\Web;

use Vn\Lib;

/**
 * Base class for REST application.
 **/
class RestService extends Service
{
	function run ()
	{
		ini_set ('display_errors', _ENABLE_DEBUG);
		set_error_handler ([$this, 'errorHandler'], E_ALL);
		set_exception_handler ([$this, 'exceptionHandler']);

		$this->startSession ();
		$this->loadMethod (__NAMESPACE__.'\RestRequest');
	}
	
	function statusFromException ($e)
	{
		try {
			throw $e;
		}
		catch (SessionExpiredException $e)
			{ $status = 401; }
		catch (BadLoginException $e)
			{ $status = 401; }
		catch (Lib\UserException $e)
			{ $status = 400; }
		catch (\Exception $e)
			{ $status = 500; }
			
		http_response_code ($status);
	}
	
	function errorHandler ($errno, $message, $file, $line, $context)
	{
		$eFlag =
			  E_USER_NOTICE
			| E_USER_WARNING
			| E_USER_DEPRECATED
			| E_NOTICE
			| E_WARNING
			| E_DEPRECATED;

		if (!($errno & $eFlag))
			http_response_code (500);
		
		return FALSE;
	}

	function exceptionHandler ($e)
	{
		$this->statusFromException ($e);
		throw $e;
	}
}