<?php
header('P3P: CP=CAO PSA OUR');
@require_once('log4php/Logger.php');
@require_once('log4php/LoggerMDC.php');

/**
 * The directory in which your application specific resources are located.
 * The application directory must contain the bootstrap.php file.
 *
 * @link http://kohanaframework.org/guide/about.install#application
 */
$application = 'application';

/**
 * The directory in which your modules are located.
 *
 * @link http://kohanaframework.org/guide/about.install#modules
 */
$modules = 'modules';

/**
 * The directory in which the Kohana resources are located. The system
 * directory must contain the classes/kohana.php file.
 *
 * @link http://kohanaframework.org/guide/about.install#system
 */
$system = 'system';

/**
 * The directory in which the Kohana resources are located. The vendor
 * 第三方扩展API存放
 * @var string
 */
$vendor = 'vendor';

/**
 * The default extension of resource files. If you change this, all resources
 * must be renamed to use the new extension.
 *
 * @link http://kohanaframework.org/guide/about.install#ext
 */
define('EXT', '.php');

/**
 * Set the PHP error reporting level. If you set this in php.ini, you remove this.
 * @link http://www.php.net/manual/errorfunc.configuration#ini.error-reporting
 *
 * When developing your application, it is highly recommended to enable notices
 * and strict warnings. Enable them by using: E_ALL | E_STRICT
 *
 * In a production environment, it is safe to ignore notices and strict warnings.
 * Disable them by using: E_ALL ^ E_NOTICE
 *
 * When using a legacy application with PHP >= 5.3, it is recommended to disable
 * deprecated notices. Disable with: E_ALL & ~E_DEPRECATED
 */
error_reporting(E_ALL | E_STRICT);

/**
 * End of standard configuration! Changing any of the code below should only be
 * attempted by those with a working knowledge of Kohana internals.
 *
 * @link http://kohanaframework.org/guide/using.configuration
 */

// Set the full path to the docroot
define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);

// Set the full path to the srcroot
define('SRCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'src'.DIRECTORY_SEPARATOR);
define('KOHANAROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'common'.DIRECTORY_SEPARATOR.'kohana'.DIRECTORY_SEPARATOR);
// Make the application relative to the docroot, for symlink'd index.php
if ( ! is_dir($application) AND is_dir(SRCROOT.$application))
    $application = SRCROOT.$application;

// Make the modules relative to the docroot, for symlink'd index.php
if ( ! is_dir($modules) AND is_dir(SRCROOT.$modules))
    $modules = SRCROOT.$modules;
if ( ! is_dir($modules) AND is_dir(KOHANAROOT.$modules))
    $modules = KOHANAROOT.$modules;

// Make the system relative to the docroot, for symlink'd index.php
if ( ! is_dir($system) AND is_dir(SRCROOT.$system))
    $system = SRCROOT.$system;
if ( ! is_dir($system) AND is_dir(KOHANAROOT.$system))
    $system = KOHANAROOT.$system;

// Make the system relative to the docroot, for symlink'd index.php
if (is_dir(SRCROOT.$vendor))
    $vendor = SRCROOT.$vendor;
if (is_dir(KOHANAROOT.$vendor))
    $vendor = KOHANAROOT.$vendor;

// Define the absolute paths for configured directories
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);
define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR);
define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR);
define('VENPATH', realpath($vendor).DIRECTORY_SEPARATOR);

// Clean up the configuration vars
unset($application, $modules, $system);

if (file_exists('install'.EXT))
{
    // Load the installation check
    return include 'install'.EXT;
}

/**
 * Define the start time of the application, used for profiling.
 */
if ( ! defined('KOHANA_START_TIME'))
{
    define('KOHANA_START_TIME', microtime(TRUE));
}

/**
 * Define the memory usage at the start of the application, used for profiling.
 */
if ( ! defined('KOHANA_START_MEMORY'))
{
    define('KOHANA_START_MEMORY', memory_get_usage());
}

// Bootstrap the application
require APPPATH.'bootstrap'.EXT;

// Setup Cookie $salt
Cookie::$salt = "com.fenqile";

if (PHP_SAPI == 'cli') // Try and load minion
{
    class_exists('Minion_Task') OR die('Please enable the Minion module for CLI support.');
    set_exception_handler(array('Minion_Exception', 'handler'));

    Minion_Task::factory(Minion_CLI::options())->execute();
}
else
{
    /**
     * Execute the main request. A source of the URI can be passed, eg: $_SERVER['PATH_INFO'].
     * If no source is specified, the URI will be automatically detected.
     */
    // echo Request::factory(TRUE, array(), FALSE)
    //     ->execute()
    //     ->send_headers(TRUE)
    //     ->body();

    $req = Request::factory(TRUE, array(), FALSE);
    $rsp = $req->execute();
    echo $rsp->send_headers(TRUE)->body();

    $server_ip = $_SERVER['SERVER_ADDR'];
    $client_ip = FQL_Util::get_client_ip();
    $domain = $_SERVER['HTTP_HOST'];
    $directory = $req->directory();
    $controller = $req->controller();
    $action = $req->action();
    $cost_time = ceil((microtime(TRUE) - KOHANA_START_TIME) * 1000); // 花费时间：单位ms
    $url = $_SERVER['REQUEST_URI'];
    $sts = $rsp->status();
    $uid = empty($_COOKIE['uid']) ? '' : $_COOKIE['uid'];
    $ua = $req->headers('User-Agent');

    $qs = array(
        'uip' => $client_ip,
        'sip' => $server_ip,
        'uid' => $uid,
        'dm' => $domain,
        'dir' => $directory,
        'c' => $controller,
        'a' => $action,
        'ac' => $cost_time,
        'u' => $url,
        'sts' => $sts,
        'ua' => $ua
    );

    Report::instance()->ut($qs);
}