<?php

 class Cliente {
     

    public static function estaLogueado() {
        SesionCliente::abrir();
        $ObjUSER = SesionCliente::valor(SESION);
        SesionCliente::cerrar();
        if($ObjUSER){
            return true;
        }
        return false;
        
    }
    public static function abrirSesion($usuario) {
        SesionCliente::valor(SESION, $usuario);
        Usuarios::registrarLogin( Cliente::ip(), Cliente::latitud(), Cliente::longitud());
        return SesionCliente::valor(SESION);
    }
    public static function cerrarSesion() {
        SesionCliente::destruir();
    }
    public static function latitud($latitud = null) {
        return SesionCliente::valor('LATITUD', $latitud);
    }
    public static function longitud($longitud = null) {
        return SesionCliente::valor('LONGITUD', $longitud);
    }
    static function ip() {
        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP')) {
            $ipaddress = getenv('HTTP_CLIENT_IP');
        } else if (getenv('HTTP_X_FORWARDED_FOR')) {
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
        } else if (getenv('HTTP_X_FORWARDED')) {
            $ipaddress = getenv('HTTP_X_FORWARDED');
        } else if (getenv('HTTP_FORWARDED_FOR')) {
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        } else if (getenv('HTTP_FORWARDED')) {
            $ipaddress = getenv('HTTP_FORWARDED');
        } else if (getenv('REMOTE_ADDR')) {
            $ipaddress = getenv('REMOTE_ADDR');
        } else {
            $ipaddress = 'DESCONOCIDA';
        }
        return $ipaddress;
    }
    public static function esAdministrador() {
        if (self::estaLogueado()):
            $dato = SesionCliente::activa()->usuarioADMINISTRADOR;
            if($dato == 'SI'):
                return true;
            endif;
        endif;
        return false;
    }
    
    public static function dato($atributo) {
        if (self::estaLogueado()):
            $dato = SesionCliente::dato($atributo);
            return $dato;
        endif;
        
    }
    public static function datoSession($nombre, $valor = NULL) {
        return SesionCliente::valor($nombre, $valor);
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    //
    
    
    var $nombre;
    var $correo;
    var $cedula;
    
    

    public static function nombre() {
        return isset($_SESSION[SESION]) ? $_SESSION[SESION]->personaNOMBRES . " " . $_SESSION[SESION]->personaAPELLIDOS : null;
    }
    
    public static function usuarioID() {
        return isset($_SESSION[SESION]) ? $_SESSION[SESION]->usuarioID : null;
    }
    
    public static function cargoID() {
        return isset($_SESSION[SESION]) ? $_SESSION[SESION]->cargoID : null;
    }
    
    public static function app($App = null) {
        if (!is_null($App)) {
            return $_SESSION['App'];
        } else {
            self::datoSession('App');
        }
    }

    public static function correo() {
        return isset($_SESSION[SESION]) ? $_SESSION[SESION]->colaboradorEMAIL : null;
    }

    public static function colaboradorID() {
        return isset($_SESSION[SESION]) ? $_SESSION[SESION]->colaboradorID : null;
    }

    public static function cedula() {
        return isset($_SESSION[SESION]) ? $_SESSION[SESION]->personaIDENTIFICACION : null;
    }

    static function comoInvitado() {
        $_SESSION['INVITADO'] = 1;
    }

    static function esInvitado() {
        if ($_SESSION['INVITADO'] == 1):
            return true;
        else:
            return false;
        endif;
        
    }

    static function dioPermisoGoogle() {
        global $auth;
        try{
            $payload = $auth->getPayload();
            return isset($payload['email']);
        }catch (Exception $e) {
            return false;
        }
        return false;
    }
    
    static function emailPermisoGoogle() {
        global $auth;
        $payload = $auth->getPayload();
        return ($payload['email']);
    }
    
    static function codigoRedireccion() {
        global $auth;
        if ($auth->checkRedirectCode()) {
            if (isset($_GET['code'])) {
                return $_GET['code'];
            } else {
                return FALSE;
            }
        }
        return FALSE;
    }
    static function codigoRedireccionValido() {
        global $auth;
        if ($auth->checkRedirectCode()) {
            if (isset($_GET['code'])) {
                $payload = $auth->getPayload();
                return isset($payload['email']);
            } else {
                return false;
            }
        }
        return false;
    }

    static function cargarDatosUsuario($correo = null) {
        $Usuario = Usuarios::porUsername(is_null($correo) ? self::correo() : $correo);
        if (!empty($Usuario)) {
            //$_SESSION['Usuario'] = $Usuario;
            $_SESSION[SESION] = Colaboradores::datosCompletosPorUsuario($Usuario->usuarioID);
            //$_SESSION['INVITADO'] = 0;
        }
        return null;
    }

    // static function estaLogueado() {
    //     if (empty(self::correo()) or is_null(self::correo())) {
    //         return false;
    //     }
    //     return true;
    // }

    static function urlLoguearse() {
        global $auth;
        return $auth->getAuthUrl();
    }

    public static function get($nombreSesion) {
        if (isset($_SESSION[$nombreSesion])):
            $sesion = $_SESSION[$nombreSesion];
            return $sesion;
        endif;
        return null;
    }

    public static function set($nombreSesion, $valorSesion) {
        $_SESSION[$nombreSesion] = $valorSesion;
    }

    public static function actualizar($nombreSesion, $valorSesion) {
        $_SESSION[$nombreSesion] = $valorSesion;
        return $_SESSION[$nombreSesion];
    }

    public static function getUsuario() {
        if (isset($_SESSION[SESION])):
            return self::get(SESION);
        endif;
        return null;
    }

    
    public static function registroIP($usuario) {
        self::set('IP', $usuario);
        return self::get('IP');
    }

    public static function is_inactividad() {
        if (!empty($_SESSION[SESION_ESTADO])):
            if ($_SESSION[SESION_ESTADO] == TRUE):
                return true;
            endif;
        endif;
        return false;
    }

    
    public static function tienePermiso($codigoOperacion) {
        $permisosDefault = [ 'iniciarSesion', 'cerrarSesion' ];
        if (!in_array($codigoOperacion, $permisosDefault) and !empty(self::getUsuario())):
            if(!Cliente::esAdministrador()):
                if(ControlAcceso::porIp(self::getUsuario())):
                    if(ControlAcceso::delUsaurio(self::dato('usuarioID'), $codigoOperacion)):
                        return true;
                    else:
                        return false; 
                    endif;
                else:
                    return false; 
                endif;
            else:
                return true;
            endif;
        else:
            return true;
        endif;
    }
    
    public static function apiTienePermiso($codigoOperacion , $usuario, $ip=null) {
        $permisosDefault = [];
        if (!in_array($codigoOperacion, $permisosDefault) and !empty($usuario)):
            if(ControlAcceso::porIp($usuario , $ip)):
                //if(ControlAcceso::delUsaurio($usuario->usuarioID, $codigoOperacion)):
                if(true):
                    return true;
                else:
                    return false; 
                endif;
            else:
                return false; 
            endif;
        else:
            return true;
        endif;
    }

}

