<?php
require_once '../../php-rest-services/bin/wlRestService.php';
require_once '../../php-rest-services/bin/wlRestAuth.php';
require_once '../../php-rest-services/bin/triggers/wlRestTriggerAddTimestamp.php';
require_once '../../php-rest-services/bin/triggers/wlRestTriggerAntiSpam.php';
require_once '../../php-rest-services/bin/triggers/wlRestTriggerBanByIp.php';
require_once '../../php-rest-services/bin/triggers/wlRestTriggerError.php';
require_once '../../php-rest-services/bin/triggers/wlRestTriggerServiceKey.php';
require_once 'sampleSimpleAuthHandler.php';
require_once 'sampleMySqlAuthHandler.php';
require_once 'sampleBankRestController.php';
require_once 'sampleHelloRestControllerV1.php';
require_once 'sampleHelloRestControllerV2.php';
require_once 'sampleMathRestController.php';
require_once 'sampleDbSimulatorRestController.php';
require_once 'sampleOutputHandler.php';
//create a service object
$service = new wlRestService();
//load a settings file (new settings will be merged with any previous loaded settings)
$service->loadSettings(dirname(__FILE__) . '/custom-rest-settings.ini');
//register the service controllers
$service->registerController(new sampleBankRestController());
$service->registerController(new sampleHelloRestControllerV1());
$service->registerController(new sampleHelloRestControllerV2());
$service->registerController(new sampleMathRestController());
$service->registerController(new sampleDbSimulatorRestController());
//register custom output handlers
$service->registerOutputHandler(new sampleOutputHandler('custom'));
//sets the default output handler
$service->setDefaultOutputHandlerByExtension(wlRestUtils::RESPONSE_TYPE_JSON);
//register global events
$service->registerTrigger(new wlRestTriggerAntiSpam(), wlRestTrigger::ON_REQUEST_EVENT);
$service->registerTrigger(new wlRestTriggerBanByIp(), wlRestTrigger::ON_REQUEST_EVENT);
$service->registerTrigger(new wlRestTriggerServiceKey(), wlRestTrigger::ON_REQUEST_EVENT);
//$service->registerTrigger(new wlRestTriggerAddTimestamp(), wlRestTrigger::ON_DATA_EVENT);
$service->registerTrigger(new wlRestTriggerError(), wlRestTrigger::ON_ERROR_EVENT);
//setup authentication by instantiating a handler and registering auth controller and a corresponding trigger
$authHandler = new sampleSimpleAuthHandler('admin', 'admin');
//$authHandler = new sampleMySqlAuthHandler('localhost', 'db_name', 'db_user', 'db_password', 'users_table', 'name_field', 'password_field', isPasswordMd5);
$service->registerController(new wlRestControllerAuth($authHandler));
$service->registerTrigger(new wlRestTriggerAuth($authHandler), wlRestTrigger::ON_REQUEST_EVENT);
//setup caching
//$service->setCacheDir(dirname(__FILE__) . '/cache', 10);
//setup logging
$service->setLogDir(dirname(__FILE__));
//run the service
$service->run();