<?php
class FrontController
{
    static function main()
    {

            //require 'Zend/Date.php'; //Libreria
            //date_default_timezone_set('Europe/Madrid');
            //Incluimos algunas clases:
            //echo "----- hay alguien ahi -----";
            require 'libs/Config.php'; //de configuracion
            require 'libs/SPDO.php'; //PDO con singleton
            require 'libs/ControllerBase.php'; //Clase controlador base
            require 'libs/ModelAbstract.php';
            require 'libs/ModelBase.php'; //Clase modelo base
            require 'libs/View.php'; //Mini motor de plantillas

            require 'models/SessionsModel.php';
            require 'libs/filesManager.php';
            require 'config.php'; //Archivo con configuraciones.

            //Con el objetivo de no repetir nombre de clases, nuestros controladores
            //terminaran todos en Controller. Por ej, la clase controladora Items, sera ItemsController

            if(! empty($_REQUEST['option']))
              $comp_name = $_REQUEST['option'];
            else
              $comp_name = "com_users";

            //Formamos el nombre del Controlador o en su defecto, tomamos que es el IndexController
            if(! empty($_REQUEST['controller']))
              $controllerName = $_REQUEST['controller'] . 'Controller';
            else
              $controllerName = "UsersController";

            //Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion
            if(! empty($_REQUEST['action']))
              $actionName = $_REQUEST['action'];
            else
              $actionName = "ingresar";

            $controllerPath = $config->get('components').DS.$comp_name.DS.$controllerName.'.php';

            //Incluimos el fichero que contiene nuestra clase controladora solicitada
            if(is_file($controllerPath))
              require $controllerPath;
            else
              die('El controlador no existe - 404 not found');

            //Si no existe la clase que buscamos y su accion, tiramos un error 404
            if (is_callable(array($controllerName, $actionName)) == false){
                trigger_error ($controllerName . '->' . $actionName . '` no existe', E_USER_NOTICE);
                return false;
            }
           
            $frontSession = new SessionsModel();

            if(isset($_SESSION['usersession']['iduser'])){
                $duracion_session =  20;//en minutos
                $valor_intervalo_session = 'PT'.$duracion_session.'M';
                $intervalo_session = new DateInterval( $valor_intervalo_session ); //minutos
                $session_valida = true;//variable para definir si vemos la acción o mostramos el login
                
                //obtenemos la ultima sesión ingresada
                $rs_session = $frontSession->validarSession(@$_SESSION['usersession']['iduser']);
                //print_r($rs_session);
                $info_session = $rs_session->fetch();
                if(is_array($info_session)){
                    $date_currency = new DateTime(date('Y-m-d H:i:s'));
                    $date_session = new DateTime($info_session["date_last_activity"]);
                    date_add($date_session, $intervalo_session);
                    if($date_session < $date_currency ){
                        $session_valida = false;
                        //unset($_SESSION['usersession']);
                    }else{
                        $session_valida = true;
                    }
                }else{
                    $session_valida = false;
                }

                if($session_valida){
                    $date_last_activity = new DateTime(date("Y-m-d H:i:s"));

                    $datos["date_last_activity"] = $date_last_activity->format("Y-m-d H:i:s") ;
                    $frontSession->setIdValue($_SESSION['usersession']['idsession']);

                    $_SESSION['usersession']['date_last_activity'] = $datos["date_last_activity"];
                    
                    list($rs_actividad, $message) = $frontSession->UpdateItem($datos);

                    //Se direcciona al controlador
                    $controller = new $controllerName();
                    $controller->$actionName();
                }else{
                    //establecemos el controlado y la acción por defecto
                    $actionName = "logout";
                    if($comp_name != "com_users"){
                        $comp_name = "com_users";
                        if($controllerName != "UsersController" ){
                            $controllerName = "UsersController"; //esto es para no instanciarlo dos veces
                            $controllerPath = $config->get('components').DS.$comp_name.DS.$controllerName.'.php';
                            require $controllerPath;
                        }
                    }
                    
                    //:::instanciamos e invocamos la acción
                    $controller = new $controllerName();
                    $controller->$actionName();
                }
            }else{
                $controller = new $controllerName();
                $controller->$actionName();
            }
    }
}
?>