<?php
header('Content-Type: text/html; charset=utf-8');
//ini_set('session.cookie_domain', '.estoquenow.com.br');
require_once 'lib/framework/util_functions.php';
if (UtilFunctions::is_session_started() === FALSE ) {
    session_cache_limiter('private');
    session_cache_expire(480);

    session_start();
    /*session_start([
        'cookie_lifetime'=>86400, // 1 dia
        'gc_maxlifetime'=>86400, // 1 dia
        'gc_probability'=>1, # Enable session garbage collection with a 1% chance of running on each session_start()
        'gc_divisor'=>100,
    ]);*/
}
/*if(UtilFunctions::getClientIp() == '187.105.1.238' && isset($_SESSION['last_action'])){
    echo 'session: '.date('Y-m-d H:i:s', $_SESSION['last_action']);
}*/
/*if(isset($_SESSION["users"]["email"]) && $_SESSION["users"]["email"] == 'kassio@webadapte.com'){
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
}*/

/*$message = '<br><br><br><br><br><br><br><br><br><br><center>';
$message .= '<img src="/assets/img/undraw_maintenance_cn7j.svg" style="width:220px;">';
$message .= '<h2>Olá! Estamos realizando uma manutenção em nossos servidores.</h2><br>';
$message .= 'Em breve nosso site estará novamente no ar!<br>';
$message .= 'Lamentamos qualquer transtorno causado por essa operação e contamos com a sua compreensão.';
$message .= '</center>';
echo $message;
die();*/

require_once 'lib/framework/request.php';
require_once 'lib/framework/util_number.php';
require_once 'lib/framework/util_message.php';
require_once 'lib/framework/Math.php';
require_once 'lib/param.php';
require_once 'lib/config.php';
require_once 'lib/framework/Route.php';
require_once 'lib/framework/entity.php';
require_once 'lib/framework/link.php';
require_once 'lib/framework/navigation.php';
require_once 'lib/framework/page.php';
require_once 'lib/framework/model.php';
require_once 'lib/framework/modelApi.php';
require_once 'lib/framework/generated.values.php';
require_once 'lib/framework/genericdao.class.php';
require_once 'lib/framework/Controller.php';
require_once 'lib/framework/view.php';
require_once 'lib/framework/database.php';
require_once 'lib/framework/util_format.php';
require_once 'lib/framework/util_file.php';
require_once 'lib/framework/util_image.php';
require_once 'lib/util_file.php';
require_once 'lib/framework/static.params.php';
require_once 'lib/framework/util_date.php';
require_once 'lib/framework/util_cep.php';
require_once 'lib/framework/util_virtualstore_template.php';
require_once 'lib/framework/util_video_embed.php';
require_once 'lib/framework/key_simetric.php';
require_once 'lib/framework/send_email.php';
require_once 'lib/framework/Sanitize.php';
require_once 'lib/framework/Aws_S3.php';
require_once 'lib/Psr/Log/LogLevel.php';
require_once 'lib/Psr/Log/LoggerInterface.php';
require_once 'lib/Psr/Log/AbstractLogger.php';
require_once 'lib/Klogger/Logger.php';
require_once 'lib/vendor/autoload.php';

// logging
$log = new Katzgrau\KLogger\Logger ( "logs" , Psr\Log\LogLevel::INFO);
try{
	ini_set('upload_max_filesize', '4M');
    //setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
    //setlocale(LC_NUMERIC, NULL);
    date_default_timezone_set('America/Recife');
    //$action = Request::get('action');
    //$oid = Request::get('oid');
    //$page_slug = Request::get('slug');
    $route = new Route();
    $array_uri = $route->match($_SERVER["REQUEST_URI"]);
    #print_r($array_uri);
	#die();
	
	$ip_blocked = array('179.156.160.61', '177.158.165.33', '129.213.67.237', '93.158.90.52');
	if(in_array(UtilFunctions::getClientIp(), $ip_blocked)){
		//$log->error('O ip bloqueado '.UtilFunctions::getClientIp().' acessou o Estoque NOW');
		die('Identificamos um acesso suspeito da sua máquina em nosso sistema. Dessa forma, seu acesso foi temporariamente bloqueado. Qualquer dúvida, entre em contato com o nosso suporte (81)98125-4271.');
	}
	
	/*if(UtilFunctions::getClientIp() == '177.183.198.140'){
		print_r($array_uri);	
		die();
	}*/
	#$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
	#$log->warning('ip acessando [index.php]: '.UtilFunctions::getClientIp().' = '.$actual_link);

    $controller = $array_uri["controller"];
    $action = $array_uri["action"];
    # verifica se o arquivo de controle existe na pasta controle
    if (!file_exists("controllers/{$controller}Controller.php")) {
        if (file_exists("views/Home/Contentpages/".strtolower($controller).".php")) {
            $array_uri["params"] = strtolower($controller);
            $controller = 'Home';
            $action = 'page';
        }else{
            Config::redirect(Config::$url_base.'/404.html');
            exit;
        }
    }

    $params = (isset($array_uri["params"]) ? $array_uri["params"] :  null);

	# inclui o controle na página
	require_once "controllers/{$controller}Controller.php";

	# adiciona a terminação Controller
	# ao nome do controller
	$controller .= 'Controller';

	# instancia o controle
	$controller = new $controller();

	try{
		# verifica se o método existe no objeto controle
		if (method_exists($controller, $action)) {
			$start_time_exec = microtime(true); 
			# se existir, executa o método
			$controller->$action($params);
			#$log->info('[tracer]['.UtilFunctions::getClientIp().']: '.$_SERVER["REQUEST_URI"]);
			$end_time_exec = microtime(true);
            $execution_time_exec = ($end_time_exec - $start_time_exec);
            if(doubleval($execution_time_exec) >= 4){
              	$logTracer = new Katzgrau\KLogger\Logger ( "logs" , Psr\Log\LogLevel::INFO, array('filename'=>'log-tracer_'.date('Y-m-d')));
               	$logTracer->warning('[tracer]['.UtilFunctions::getClientIp().']: alto tempo de execução de consulta: '.round($execution_time_exec,2).'s. Params: '.(isset($_SESSION["companies"]["id"]) ? '[company_id]: '.UtilFormat::formatDencrypt($_SESSION["companies"]["id"]).';' : '').$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]);
            }
		}
		else {
			Config::redirect(Config::$url_base.'/404.html');
		}
	}catch(Exception $e){
		throw $e;
	}

}catch (PDOException $ex) {
    #echo $ex->getMessage();
    #die();
    $url =  "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
    $escaped_url = htmlspecialchars( $url, ENT_QUOTES, 'UTF-8' );
    $trace = '<table border="0">';
    $trace .= '<tr><td>URL</td><td>'.$escaped_url.'</td></tr>';
    foreach ($ex->getTrace() as $a => $b) {
        foreach ($b as $c => $d) {
            if ($c == 'args') {
                foreach ($d as $e => $f) {
                    $trace .= '<tr><td><b>' . strval($a) . '#</b></td><td align="right"><u>args:</u></td> <td><u>' . $e . '</u>:</td><td><i>' . $f . '</i></td></tr>';
                }
            } else {
                $trace .= '<tr><td><b>' . strval($a) . '#</b></td><td align="right"><u>' . $c . '</u>:</td><td></td><td><i>' . $d . '</i></td>';
            }
        }
    }
    $trace .= '</table>';
    
    $log->error('Global Error[pdo]'.$trace);
    Config::redirect(Config::$url_base.'/Home/error');
}catch (Exception $ex) {
    #echo $ex->getMessage();
    #die();
    //$log->error($ex->getMessage());
    $message = preg_replace('/dbname=([^;]+)/i', 'dbname=***', $ex->getMessage());
    $message = preg_replace('/host=([^;]+)/i', 'host=***', $message);
    $message = preg_replace('/port=([^;]+)/i', 'port=***', $message);
    $message = preg_replace('/user(name)?=([^; ]+)/i', 'user=***', $message);
    $log->error('[pdo] connection error ' . json_encode($message));
    Config::redirect(Config::$url_base.'/Home/error');
}
