<?php

include_once("lib/general/cGeneral.php");
include_once("Model/UserAuth.php");
class GeneralController extends cGeneral{
    
    public $cGeneral;

    function __construct(){
        $General = new cGeneral();
        #$this->$General = $this;
    }

    public function login(){

        if(($this->postRequest()) && !empty($this->postRequest())){
            
            #Hay datos por verificar
            $data = $this->postRequest();
            
            $_response = UserAuth::validEmailRegis($data["email"]);
            $response = json_decode($_response,true);
            
            if($response["code"] == 1){
                $_response = UserAuth::verifLogueo($data["email"], $data["psw"]);
                $response = json_decode($_response,true);
                
                if($response['code'] == 1){
                    
                    #Inicio de Sesion correcto
                    $this->redirect("admin", "index");
                }
            }
            else{
                return $response["msg"];
            }
            
        }
        else {
            $this->getLayoutRender("_public");
            #Solo se muestra la vista
        }
    }
    
    public function error_404(){
            $this->getLayoutRender("_public");
    }
    
    public function logout(){
        session_start();

        $_SESSION = array();
        session_destroy();
        $this->redirect("", "");
    }

    public function recuperar() {
        $this->getLayoutRender("_public");
    }
    public function resetpassword() {
        $this->getLayoutRender("_public");
    }

    public function tokengeneration(){
        $response = array();

        if(($this->postRequest()) && !empty($this->postRequest())){
            #Hay datos por verificar
            $data = $this->postRequest();
            #print_r($data);
            $apikey_exist = $this->checkapikey($data["API-KEY"]);

            #exit;
            //S0lQRVJRVUlOSUVMQUFaSTg5TDRMRVNTMjAyMg==
            if($apikey_exist == "OK" ){
                //creamos el token
                $_token = "TokenKiper&---&".date("Y-m-d H:i:s")."&---&"."PEOL";
                $token = base64_encode($_token);

                global $General;
                global $UserAuth;
                $conexion = $General->getConexion(MOD_AMBIENT);
                $sql_new_token = "INSERT INTO tokens_consumo (token, created_at,apikey) VALUES ('".$token."', '".date('Y-m-d H:i:s')."','".$data["API-KEY"]."')";
                $resultado = mysqli_query($conexion,$sql_new_token);
        
                try{
                    if (!$resultado) {
                        throw new Exception("Error de BD, no se pudo consultar la base de datos " );
                        $General->closeConexcionDB($conexion);
                        $response["code"] = 300;
                        $response["msg"] = "El servicio no esta disponible. Intente más tarde";
                    }
                    else{
                        
                    
                        #Se creo el token
                        $response['code'] = 200;
                        $response["token"] = $token;
                        $response["msg"] = "El token generado tiene un tiempo de vida de 3 min y es de un solo uso.";
        
                        
                        $General->closeConexcionDB($conexion);
                    }
                }
                catch(Exception $e){
                    echo $e->getMessage();
                    $response["code"] = 500;
                    $response["msg"] = "Contacte al proveedor. Mensaje de error: ".$e;
                }
                
                
            }
            else{
                $response["code"] = 301;
                $response["msg"] = "No Autorizado. Revisa tus credenciales";
            }
            
        }
        else {
            $response["code"] = 301;
            $response["msg"] = "El servicio solo soporta consumo POST";
        }

        echo json_encode($response,true);
    }

    #CKTK
    public function checktoken($token){
        
        #Obtengo todos los addons activos e inactivos de la cuenta donde se inicia sesion
        $sql_get_tokens = "SELECT * FROM
                                tokens_consumo 
                            WHERE token = '".$token."';";
                
        $resultado = mysqli_query($conexion,$sql_get_tokens);
        if (!$resultado) {
            throw new Exception("Error consultando el token, ERROR: COD: CHMKKP::QDM::CKTK::CCSSDB-01");
            $this->closeConexcionDB($conexion);
            return "COD: CHMKKP::QDM::CKTK::CCSSDB-01";

        }
        else{
            while ($fila =mysqli_fetch_array($resultado, MYSQLI_ASSOC)){
                $get_row[] =$fila;
            }
            $this->closeConexcionDB($conexion);
            for($x=0; count($get_row)>$x;$x++){
                if($get_row[$x]["status"] == 1){
                    return "Token expirado";
                }
                else{
                    //Token válido
                    return "OK";
                }
            }
        }
    }

    #SETTK
    public function settoken($token){
    
        #Actuliza los tokens para inutilizarlos
        $conexion = $General->getConexion(MOD_AMBIENT); 
        $sql_update_user = "UPDATE tokens_consumo SET status = 1 WHERE token = '".$token."'";
        $resultado = mysqli_query($conexion,$sql_update_user);

        try{
            if (!$resultado) {
                throw new Exception("Error consultando el token, ERROR: COD: CHMKKP::QDM::SETTK::INU-01");
                $this->closeConexcionDB($conexion);
                return "COD: CHMKKP::QDM::SETTK::INU-01";
            }
            else{
                $fila = array();
                while ($fila =mysqli_fetch_array($resultado, MYSQLI_ASSOC)){
                    $get_row[] =$fila;
                }

                
                $General->closeConexcionDB($conexion);
                return $get_row;
            }
        }
        catch(Exception $e){
            echo $e->getMessage();
            die();
        }
    }

    #CKAPKY
    public function checkapikey($apikey){
        global $General;
        $conexion = $General->getConexion(MOD_AMBIENT); 
        $sql_get_tokens = "SELECT * FROM
                                apikey_kipers 
                            WHERE apikey = '".$apikey."';";
                
        $resultado = mysqli_query($conexion,$sql_get_tokens);
        if (!$resultado) {
            throw new Exception("Error consultando el token, ERROR: COD: CKAPKY::KP30::CCSSDB-01");
            $this->closeConexcionDB($conexion);
            return "COD: CHMKKP::QDM::CKTK::CCSSDB-01";

        }
        else{
            while ($fila =mysqli_fetch_array($resultado, MYSQLI_ASSOC)){
                $get_row[] =$fila;
            }
            $this->closeConexcionDB($conexion);
            for($x=0; count($get_row)>$x;$x++){
                if($get_row[$x]["status"] == 0){
                    return "CLIENTE INACTIVO - CONTACTA A SOPORTE PARA MÁS INFORMACIÓN";
                }
                else{
                    //Token válido
                    return "OK";
                }
            }
        }
    }

    #Servicio que trae todos los giros de negocios
    public function get_cat_giros_negocios(){
        global $General;
        $data = $General->postRequest();
        $response = array();
        $conexion = $this->getConexion(MOD_AMBIENT);
        if($General->checktoken($data["token"])== "OK"){
            
            $sql_get_tokens = "SELECT id_giros_negocio, nombre_giro_negocio FROM giros_negocio WHERE status_giro_negocio = 1;";
                    
            $resultado = mysqli_query($conexion,$sql_get_tokens);
            if (!$resultado) {
                throw new Exception("Error consultando las configuraciones, ERROR: get_cat_giros_negocios");
                $this->closeConexcionDB($conexion);
                $response["code"] = 301;
                $response["msj"] = "Error consultando las configuraciones, ERROR: get_cat_giros_negocios";

    
            }
            else{
                while ($fila =mysqli_fetch_array($resultado, MYSQLI_ASSOC)){
                    $get_row[] =$fila;
                }
                $this->closeConexcionDB($conexion);
                if(count($get_row)>0){
                    
                    $response["code"] = 200; 
                    $response["data"] = $get_row;
                }
                else{
                    $response["code"] = 301;
                    $response["msj"] = "No existen datos para mostrar";
                    
                }
            }
        }
        else{
            $response['code'] = 301;
            $response['msj'] = "El token ya fue utilizado. Genera un nuevo token para continuar";  
        }
        
        $General->settoken($data["token"]);
        echo json_encode($response);
    }


    #Servicio que trae las ladas e iconos de banderas
    public function get_cat_paises(){
        global $General;
        $data = $General->postRequest();
        $response = array();
        $conexion = $this->getConexion(MOD_AMBIENT);
        if($General->checktoken($data["token"])== "OK"){
            
            $sql_get_tokens = "SELECT id_pais,nombre_pais, lada_pais,CONCAT('ico_ban_',clave_pais ) AS icono_bandera FROM cat_paises WHERE status = 1;";
                    
            $resultado = mysqli_query($conexion,$sql_get_tokens);
            if (!$resultado) {
                throw new Exception("Error consultando las configuraciones, ERROR: get_cat_paises");
                $this->closeConexcionDB($conexion);
                $response["code"] = 301;
                $response["msj"] = "Error consultando las configuraciones, ERROR: get_cat_paises";    
            }
            else{
                while ($fila =mysqli_fetch_array($resultado, MYSQLI_ASSOC)){
                    $get_row[] =$fila;
                }
                $this->closeConexcionDB($conexion);
                if(count($get_row)>0){
                    
                    $response["code"] = 200; 
                    $response["data"] = $get_row;
                }
                else{
                    $response["code"] = 301;
                    $response["msj"] = "No existen datos para mostrar";
                    
                }
            }
        }
        else{
            $response['code'] = 301;
            $response['msj'] = "El token ya fue utilizado. Genera un nuevo token para continuar";  
        }
        
        $General->settoken($data["token"]);
        echo json_encode($response);
    }
    
}
?>
