<?php namespace App\Http\Controllers;

//use App\Custom\IFXConnection;
use App\Custom\SQLConnection;
use App\Custom\Misc;
use App\Http\Controllers\UserController;
use App\Http\Controllers\LEDController;
use Request;
use Session;
use DB;
use App\Custom\Mailer;
use Log;

  
class LoginController extends Controller  {

	//obtiene la vista de login
	public function obtenerLogin() {
		$mensaje = '';
		if(request::Input('ns')) {
		  $mensaje = 'Su sesión expiró, por favor vuelva a iniciar sesión';
		}
		return view('login')
		->with('url','productos')
		->with('mensaje',$mensaje);
	}
    
	//Cambiar la clave actual con parametros post.
	public function cambiarClave() {
		$usuario = Misc::decrypt(Request::input('u'));
		$clave_anterior = Request::input('old_password');
        $clave_nueva = Request::input('new_password');
        //
        if (!preg_match('/^[A-ZÑa-zñ0-9!@#$%^&\(\)\-_\+\*]{10,26}$/',$clave_nueva)) {
            // La clave nueva no cumple con los requisitos
            // Realiza las acciones necesarias en caso de error
            return json_encode(array('error' => 2,'mensaje' => 'La contraseña debe contener entre 10 y 26 caracteres, una minúscula, una mayúscula, un número, y un caracter especial'));
            //
        }
        //                
        $respuesta = SQLConnection::cambiarClave($usuario,$clave_anterior,$clave_nueva);
        if(isset($respuesta->status)) {
            switch ($respuesta->status) {
                case '20':
                    return json_encode(array('error' => 0,'mensaje' => "OK"));
                    break;
                default:
                    return json_encode(array('error' => 1,'mensaje' => $respuesta->status_message));
                    break;
            }
        }
	}

	//Envía mail para restablecer la clave de un usuario
	public function enviarRestablecerClave() {
		$mail  = Request::input('mail');

		$data = SQLConnection::enviarRestablecerClave($mail);
        //var_dump($data);
        //die();
		if(!isset($data)) {
		    return json_encode(array('error' => 1,'mensaje' => "No existe ningún usuario relacionado con esa cuenta de mail, por favor verifique los datos ingresados."));
		}

		$date =strtotime("now");
		$content = new \stdClass();
		$content->username = $data->username;
		$user_encrypt = Misc::encrypt(json_encode(array('u' => $data->username,'d' => $date)));
        $user_encrypt = urlencode($user_encrypt);
        //
        $protocol = 'http://';
        if ( isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) ){
            $protocol = 'https://';
        }
        //
		$content->link = $protocol.\Request::header()['host'][0]."/restablecer-clave?u=$user_encrypt";
        //
		/* 03/03/2021: Agregamos buscar el logo y texto segun servicio */
        $false = false; 
		$null = null; 
		$plataforma = null; 
		$idioma =  $data->idioma;
		if ($plataforma == null) {
			$pos = strpos(Request::header()['host'][0] , 'inquiro'); 
			if ($pos !== false) { $plataforma = 'inquiro';}
		}
		if ($plataforma == null) {
			$pos = strpos(Request::header()['host'][0] , 'imperium'); 
			if ($pos !== false) { $plataforma = 'imperium';}
		}
		if ($plataforma == null) {
			$pos = strpos(Request::header()['host'][0] , 'avaldigital'); 
			if ($pos !== false) { $plataforma = 'aval';}
		}
		if ($plataforma == null) {
			$plataforma = 'fidelitas';
		}

		$web = SQLConnection::backendStoreProcedure('multi_web_', array('recuperar_clave',null,null,null,null,null,null,null,$plataforma,$idioma),'selectOne'); 

		$template = \View::make('/led/led_email_template')->render(); 
        $body = str_replace(['%%EMAIL_TITLE%%', '%%LOGO_URL%%'], [$web->web_title, $web->uri_email_logo], $template);
        $mensaje = $web->mensaje; 
        $mensaje = str_replace('%%URL%%',$content->link,$mensaje);
        $mensaje = str_replace('%%USUARIO%%',$content->username,$mensaje);
        $mail_content = str_replace(['%%EMAIL_CONTENT%%'], [$mensaje], $body);
        $to = $data->email; 
        $from  = $web->sender ?? env('EMAIL_SOPORTE'); 
        $replyto = $from; 
        $mail_subject = $web->asunto;

        $ok = false; 
        if (filter_var($to, FILTER_VALIDATE_EMAIL)) {
            Mailer::from($from);
            Mailer::to($to);
            Mailer::replyto($replyto);
            Mailer::text($mail_content, $mail_subject);
            
            $ok = Mailer::send();                          
        }
		/* Fin del agregado 03/03/2021, y cambiamos el if de abajo */ 
        //if(Misc::enviarMail("mails/restablecer_clave",$data->email,$content,"Recuperación de Clave",'',env('EMAIL_SOPORTE'))) {
        if ($ok) {
		    return json_encode(array('error' => 0,'mensaje' => "Se enviaron los datos de restablecimiento de mail a ".$mail));
		}
		return json_encode(array('error' => 1,'mensaje' => 'Ocurrió un error al intentar procesar su solicitud, por favor reintente mas tarde'));
	}

	/**
     * Vista con el formulario de restablecimiento de clave, 
     * previamente se chequea que posea 20 min de duración máxima 
     * de restablecimiento de la misma sino debe volver a pedir otro 
     * restablecimiento de clave.
     * 
     * @access public
     * @return view
     */
	public function obtenerRestablecerClave() {
		$usuario = json_decode(Misc::decrypt(Request::input('u')));
		$error = "";
		if(!$usuario) {
		    $error = "Ocurrió un error inesperado, por favor vuelva a recuperar la clave desde el menú";
		    //return \View::make('formulario_restablecer_clave')->with('error',$error)->with('usuario',$usuario);
            return \View::make('new_form_reestablecer_clave')->with('error',$error)->with('usuario',$usuario);
		}
		$date1 = new \DateTime(date('Y-m-d H:i:s',$usuario->d));
		$date2 = new \DateTime("now");
		$interval = $date1->diff($date2);
		if($interval->y > 0 || $interval->m > 0 || $interval->d > 0 || $interval->h > 0 || $interval->i > 20) {
	    	$error = "La sesión expiró por favor vuelva a reiniciar el proceso de recuperación de clave <a href='/'>Aquí</a>";
		}
		$usuario = Misc::encrypt(json_encode(array('usuario' => (string)$usuario->u)));
		// return \View::make('formulario_restablecer_clave')->with('error',$error)->with('usuario',$usuario);
        return \View::make('new_form_reestablecer_clave')->with('error',$error)->with('usuario',$usuario);
	}

	//
    /**
     * Cambia la contraseña de un usuario sin su clave anterior, 
     * esto solo ocurre cuando el usuario olvida su clave.
     * 
     * @access public
     * @return string
     */
	public function restablecerClave() {
		$respuesta = json_decode(Misc::decrypt(Request::input('u')));
		$clave = Request::input('clave');
		Log::info($clave);
        if (!preg_match('/^[A-ZÑa-zñ0-9!@#$%^&\(\)\-_\+\*]{10,26}$/',$clave)) {
            // La clave nueva no cumple con los requisitos
            // Realiza las acciones necesarias en caso de error
            return json_encode(array('error' => 2,'mensaje' => 'La contraseña debe contener entre 10 y 26 caracteres, una minúscula, una mayúscula, un número, un caracter especial y no contener espacios'));
            //
        }
		if(!isset($respuesta->usuario) || !$clave){return false;}
		$usuario = $respuesta->usuario;
        $data = SQLConnection::restablecerClave($usuario,$clave);
		if($data->status == 20) {
            return json_encode(array('error' => 0,'mensaje' => $data->status_message));
		} else {
            return json_encode(array('error' => 1,'mensaje' => $data->status_message));
		}
	}
	
	//Si los datos son correctos inicia y genera una sesión para el usuario
	public function iniciarSesionOrg() {
		$cookie = '';
		$usuario 	=	Request::Input('usuario');
		$clave 		= Request::Input('clave');
		//----
		
		///--
		if(!isset($usuario) || !isset($clave)) {
			return false;
		}
		
		$usuario = SQLConnection::iniciarSesion($usuario,$clave,$simultaneo=0);
        
		if (isset($usuario->status)) {
			if ($usuario->status == 0 || $usuario->status == 1) {
				$productos_cliente = SQLConnection::backendStoreProcedure('login_info', array('obtener_productos_cliente',$usuario->user_id));
                
				if(empty($productos_cliente)){
					return json_encode(array('error' => 98,'mensaje' => "El cliente no tiene ningún producto asignado"));
				}
				$productos_usuario = SQLConnection::backendStoreProcedure('login_info', array('obtener_productos_usuario',$usuario->user_id));
                //
				$cliente = SQLConnection::obtenerCliente(ENV('ID_INFORME_COMERCIAL'),$usuario->user_id);
                //
				if(isset($cliente[0]->error) && ($cliente[0]->error == 99)) {
		  		    return json_encode(array('error' => 99,'mensaje' => "Error 114: Este cliente no tiene productos activos."));
		  		}
				$username = strtolower($usuario->username);
			}
			if(isset($cliente[0]->tipo_paquete) && $cliente[0]->tipo_paquete == 'P') {
				$desde = date_create($cliente[0]->fecha_desde);
				$hasta = date_create($cliente[0]->fecha_hasta);
				$hoy   = date_create(date('Y-m-d'));
				if ($desde > $hoy || $hasta < $hoy) {
					return json_encode(array('error' => 97,'mensaje' => "Su producto anual contratado se encuentra vencido"));
				}
			}
            //
			switch ($usuario->status) {
                case '0':
                    $cliente_ordenado = [];
                    $client_id 				= 0;
                    foreach ($cliente as $key => $value) {
                        if($key == 'client_id') {
                            $client_id = $value->client_id;
                        }
                        $cliente_ordenado[$value->id_producto] = $value;
                    }
                    $secciones = self::obtenerSeccionesHabilitadas($usuario->user_id);
                    $secciones = array_change_key_case($secciones, CASE_LOWER);
                    $usuario->informe_comercial = false;
                    if($secciones){
                        $cliente_ordenado[ENV('ID_INFORME_COMERCIAL')]->secciones = $secciones;
                        $usuario->informe_comercial = true;
                    }
                    $usuario->cliente 				= $cliente_ordenado;
                    $usuario->cliente['client_id']	= $client_id;
                    $preferencias = SQLConnection::backendStoreProcedure('obtener_preferencias_usuario', array($usuario->user_id), true);
                    $usuario->preferencias = $preferencias;

                    // inicio CHANCHADA LT
                    $led_access = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('LED_PRODUCTO'), $usuario->user_id));
                    $usuario->acceso_led = (!empty($led_access)) ? true : false;
                    //fin CHANCHADA LT

                    /* 14/09/2020 */
                    if (isset($preferencias->codigo_idioma)) {
                        $usuario->codigo_idioma = $preferencias->codigo_idioma; 
                    }
                    
                    $servicio_actual = env('ID_INFORME_COMERCIAL'); 
                    $servicio_actual_nombre = 'COMPACTO FIDELITAS' ;
                    if (sizeof($productos_usuario) > 0) {
                        $servicio_actual = $productos_usuario[0]->id_producto; 
                        $servicio_actual_nombre = $productos_usuario[0]->nombre_producto; 
                        $usuario->servicios = $productos_usuario;
                    }

                    // SE VALIDA QUE EL USUARIO QUE INTENTA INGRESAR TIENE 
                    if ( count($usuario->servicios) == 1 ){
                        if ( $usuario->servicios[0]->id_producto == env('IV_PRODUCTO') && Session::get('webdata')['servicio_contratado'] != env('IV_PRODUCTO') ){
                            return json_encode(array('error' => 50,'mensaje' => "Para ingresar a Inquiro Vitae por favos diríjase a www.inquirovitae.com"));
                        }
                    }
                    // LOS CLIENTES DE INQUIRO SOLAMENTE PUEDEN INGRESAR POR INQUIRO

                    Session::put('servicio_actual',$servicio_actual);
                    Session::put('servicio_actual_nombre',$servicio_actual_nombre);

                    /* Fidecheck Online */
                    $prodcli = DB::select('EXEC dbo.LN_cliente_productos_ ?,?,?,?,?,?,?', array('search', $cliente[0]->client_id, null, null, null, null, $usuario->user_id));
                    $usuario->tiene_fidecheck_online = '0';
                    $usuario->tiene_inf_solo_brief = '0';
                    $usuario->tiene_historial_acciones = '0';
                    /*$usuario->tiene_iterceros = '0';
                    foreach ( $productos_usuario as $key => $value){
                        if ($value->id_producto == '102'){
                            $usuario->tiene_iterceros = '1';
                        }
                    }*/


                    //----
                    foreach ( $prodcli as $key => $value){
                        if ($value->producto_id == 'fidecheckonline'){
                            $usuario->tiene_fidecheck_online = '1';
                        }
                        if($value->producto_id == 'graficosDashboard' && $value->activo == 1 ) {
                            $usuario->dashboard_generico = '1';
                        }
                        if ($value->producto_id == 'soloBrief'){
                            $usuario->tiene_inf_solo_brief = '1';
                        }
                        if ($value->producto_id == 'historialAcciones'){
                            $usuario->tiene_historial_acciones = '1';
                        }
                    }
                    //--------------------

                    $led_control_ingreso = false;
                    /* Subcontratistas */ 
                    if ($usuario->acceso_led) {
                        $ci = SQLConnection::backendStoreProcedure('LN_cliente_productos_', array('CONTROL_INGRESO', $usuario->cliente['client_id'], NULL, NULL, NULL, NULL, NULL, NULL), 'select');
                        $led_control_ingreso = (!empty($ci)) ? true : false;
                        
                    }
                    $usuario->led_control_ingreso = $led_control_ingreso;


                    // INQUIRO VITAE
                    $iv_access = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('IV_PRODUCTO'), $usuario->user_id));
                    $usuario->acceso_iv = (!empty($iv_access)) ? true : false;

                    // SAAS
                    $acceso_saas = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('SAAS_PRODUCTO'), $usuario->user_id));
                    $usuario->acceso_saas = (!empty($acceso_saas)) ? true : false;
                    

                    /// IMPERIUM
                    $impe_access = false;
                    // si el cliente del tiene Imperium, y opcionalmente control de acceso
                    $imperium = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('IMPE_PRODUCTO'), $usuario->user_id));                    
                    //--- PERMISOS DE LAS SECCIONES QUE TIENEN EL CLIENTE
                    $usuario_secciones_permisos = DB::selectOne('EXEC dbo.clientes_usuarios_ ?, ?', array($usuario->cliente['client_id'], $usuario->user_id));
                    //--- CONTROL DE SECCIONES IMPERIUM
                    if (!empty($imperium)) {
                        if ($imperium->cliente_imperium == 1) {
                            // si es cliente de Imperium, el usuario puede tener diferente permiso: control de contratistas, control de acceso, control de documentacion, autorizar excepcion        
                            //---
                            if (!empty($usuario_secciones_permisos)) {
                                $impe_cc = $usuario_secciones_permisos->led_control_contratistas == 1 ? true:false;
                                $impe_ci = $imperium->cliente_acceso == 1 ? ($usuario_secciones_permisos->led_control_acceso == 1 ? true:false) :false;
                                $impe_cd = $usuario_secciones_permisos->led_control_doc == 1 ? true:false;
                                $impe_exc = $imperium->cliente_acceso == 1 ? ($usuario_secciones_permisos->led_autoriza_exc_acceso == 1 ? true:false) :false;
                                //--- Modificacion Control 2022
                                //- Control de seccion 'Dashboard'
                                $impe_dash = $usuario_secciones_permisos->led_dashboard == 1 ? true:false;
                                //- Control de seccion 'Panel de Control'
                                $impe_panel = $usuario_secciones_permisos->led_panel == 1 ? true:false;
                                //---
                                $impe_access = $impe_cc || $impe_ci || $impe_cd || $impe_exc || $impe_dash || $impe_panel;
                            }
                        }
                        if ($impe_access == true) {
                            $usuario->control_contratistas = $impe_cc;
                            $usuario->control_acceso = $impe_ci;
                            $usuario->control_documentos = $impe_cd;
                            $usuario->excepcion_acceso = $impe_exc;
                            $usuario->control_dashboard_impe = $impe_dash;
                            $usuario->control_panel_impe = $impe_panel;
                        }
                    }
                    $usuario->acceso_imperium = $impe_access;
                    //
                    $usuario->led_dashboard = isset($usuario_secciones_permisos->led_dashboard) ? $usuario_secciones_permisos->led_dashboard : 0;
                    //---- CONTROL DE SECCIONES INQUIRO
                    if (!empty($iv_access)){
                        if (!empty($usuario_secciones_permisos)){
                            $iv_busqueda = $usuario_secciones_permisos->iv_ingresar_busqueda == 1 ? true:false;
                        }
                        //---
                        if ($iv_access == true) {
                            $usuario->iv_busqueda = $iv_busqueda ?? false;
                        }
                    }
                    //----
                    $user_horario = SQLConnection::backendStoreProcedure('obtener_users_horarios', array($usuario->user_id), 'selectOne');
                    if(!isset($user_horario->respuesta)){
                        return json_encode(array('error' => 100,'mensaje' => "No puede ingresar en éste momento"));
                    }	
                    $usuario->user_horario = $user_horario;	
                    $usuario->as_user_id = $usuario->user_id;
                    Session::put('usuario',$usuario);
                    Session::put('productos_cliente',$productos_cliente);
                    //-----
                    //le agrego la key de servicio contratado para poder leerlo mejor en los controllers ;) LT
                    $usuarios_restricciones_response = SQLConnection::backendStoreProcedure('obtener_usuarios_restricciones', array($usuario->user_id), 'select');
                    $usuarios_restricciones = [];
                    //-----
                    foreach ($usuarios_restricciones_response as $key_ur => $value_ur) {
                        $usuarios_restricciones[$usuarios_restricciones_response[$key_ur]->servicio_contratado][] = $value_ur;
                    }
                    Session::put('usuarios_restricciones',$usuarios_restricciones);
                    /* 
                    //16/06/2022: toma los productos e indicadores habilitados del sp [usuarios_productos_habilitados_] 
                    $productos_habilitados = [];
                    $indicadores_habilitados_usuario = [];
                    $productos_habilitados = SQLConnection::backendStoreProcedure('usuarios_productos_habilitados_', array($usuario->cliente['client_id'],$usuario->user_id,$servicio_actual,'productos'), 'select');
                    Session::put('productos_habilitados',$productos_habilitados);
                    $indicadores_habilitados_usuario = SQLConnection::backendStoreProcedure('usuarios_productos_habilitados_', array($usuario->cliente['client_id'],$usuario->user_id,$servicio_actual,'indicadores'), 'select');
                    Session::put('indicadores_habilitados_usuario',$indicadores_habilitados_usuario);	
                    // Fin 16/06/2022 
                    */
                    // SE DEFINE EL LINK
                    $link = (isset(Session::get('usuario')->servicios[0])) ? Session::get('usuario')->servicios[0]->url.'?id_producto='.Session::get('usuario')->servicios[0]->id_producto : '' ;
                    if(Request::getHttpHost() == env('URL_INFODATA')){
                        $link = env('LINK_BUSCADOR');
                    }
                    $servicio_contratado = Session::get('webdata')['servicio_contratado'];
                    //----------
                    //
                    if ( isset($usuario->servicios) ){
                        foreach ($usuario->servicios as $key => $value) {
                            if ($value->id_producto == $servicio_contratado){
                                $link = $value->url.'?id_producto='.$value->id_producto;
                                break;
                            }
                        }
                    }
                    Session::put('link_principal',$link);
                    /* -------------------------- */ 
                    /* 14/09/2020*/
                    UserController::obtenerTraduccionesBotones();
                    /* -------------------------- */ 
                    Session::save();
                    /* 14/09/2020 */
                    \Artisan::call('view:clear');
                    //
                    $cookie = \Cookie::get('disclaimer');
                    //
                    return json_encode(array('error' => 0,'mensaje' => "OK",'cookie' => $cookie,'link' => $link, 'session' => Session::get('usuario')));
                    break;
                case '1':
                    return json_encode(array('error' => 1,'u'=>Misc::encrypt($usuario->username),'mensaje' => $usuario->status_message,'cookie' => $cookie));
                    break;
                default:
                    return json_encode(array('error' => 2,'mensaje' => $usuario->status_message,'cookie' => $cookie));
                break;
            }
        }
    }

    public function iniciarSesion($es_infodata=false){
		$cookie = '';
		$usuario 	=	Request::Input('usuario');
		$clave 		= Request::Input('clave');
		///--
		if(!isset($usuario) || !isset($clave)) {
			return false;
		}
        // $zones_array = array();
        /* $timestamp = time();         
        # to maintain the original timezone, store before
        $default_timezone = date_default_timezone_get();
        foreach (timezone_identifiers_list() as $key => $zone) {    
            // date_default_timezone_set($zone);
            // $zones_array[$key]['zone'] = $zone;
            // $zones_array[$key]['diff_from_GMT'] = date('P', $timestamp);
            if ($zone == $default_timezone) {
                Session::put('default_gtm_diff',date('P', $timestamp));
            }
        } */
        # to maintain the original timezone, re-set after
        // date_default_timezone_set($default_timezone);
        // dd($zones_array);
        //
        $idioma_session_actual = Session::get('idioma') ?? Request::input('idioma');
		$usuario = SQLConnection::iniciarSesion($usuario,$clave,$simultaneo=0);
        //
		if (isset($usuario->status)) {
			if ($usuario->status == 0 || $usuario->status == 1) {
				$productos_cliente = SQLConnection::backendStoreProcedure('login_info', array('obtener_productos_cliente',$usuario->user_id));
                // dd($productos_cliente);
				if(empty($productos_cliente)){
					return json_encode(array('error' => 98,'mensaje' => "El cliente no tiene ningún producto asignado"));
				}
                //
				$productos_usuario = SQLConnection::backendStoreProcedure('login_info', array('obtener_productos_usuario',$usuario->user_id));
                //
				$cliente = SQLConnection::obtenerCliente(ENV('ID_INFORME_COMERCIAL'),$usuario->user_id);
				if(isset($cliente[0]->error) && ($cliente[0]->error == 99)) {
		  		    return json_encode(array('error' => 99,'mensaje' => "Error 114: Este cliente no tiene productos activos."));
		  		}
				$username = strtolower($usuario->username);
			}
            //
			if(isset($cliente[0]->tipo_paquete) && $cliente[0]->tipo_paquete == 'P') {
				$desde = date_create($cliente[0]->fecha_desde);
				$hasta = date_create($cliente[0]->fecha_hasta);
				$hoy   = date_create(date('Y-m-d'));
				if ($desde > $hoy || $hasta < $hoy) {
					return json_encode(array('error' => 97,'mensaje' => "Su producto anual contratado se encuentra vencido"));
				}
			}           
            //
			switch ($usuario->status) {
                case '0':
                    //
                    $this->destruirSesion();
                    $this->webDataSesion();
                    //
                    $cliente_ordenado = [];
                    $client_id 				= 0;
                    foreach ($cliente as $key => $value) {
                        if($key == 'client_id') {
                            $client_id = $value->client_id;
                        }
                        $cliente_ordenado[$value->id_producto] = $value;
                    }
                    $secciones = self::obtenerSeccionesHabilitadas($usuario->user_id);
                    $secciones = array_change_key_case($secciones, CASE_LOWER);
                    $usuario->informe_comercial = false;
                    if($secciones){
                        $cliente_ordenado[ENV('ID_INFORME_COMERCIAL')]->secciones = $secciones;
                        $usuario->informe_comercial = true;
                    }
                    $usuario->cliente 				= $cliente_ordenado;
                    $usuario->cliente['client_id']	= $client_id;
                    $preferencias = SQLConnection::backendStoreProcedure('obtener_preferencias_usuario', array($usuario->user_id), true);
                    $usuario->preferencias = $preferencias;
                    if ( isset($preferencias->user_time_zone) ){
                        $usuario->timezone = $preferencias->user_time_zone;
                    } else {
                        $usuario->timezone = 'America/Argentina/Buenos_Aires';
                    }
                    // inicio CHANCHADA LT
                    $led_access = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('LED_PRODUCTO'), $usuario->user_id));
                    $usuario->acceso_led = (!empty($led_access)) ? true : false;
                    //fin CHANCHADA LT

                    /* 14/09/2020 */
                    if (isset($preferencias->codigo_idioma)) {
                        $usuario->codigo_idioma = $preferencias->codigo_idioma; 
                    }
                    
                    $servicio_actual = env('ID_INFORME_COMERCIAL'); 
                    $servicio_actual_nombre = 'COMPACTO FIDELITAS' ;
                    if (sizeof($productos_usuario) > 0) {
                        $servicio_actual = $productos_usuario[0]->id_producto; 
                        $servicio_actual_nombre = $productos_usuario[0]->nombre_producto; 
                        $usuario->servicios = $productos_usuario;
                        //
                        $paso = false;
                        if ( $es_infodata ){
                            foreach( $usuario->servicios as $servicio ){
                                if ( $servicio->id_producto == env('ID_INFORME_COMERCIAL') ){
                                    $paso = true;
                                    break;
                                }
                            }
                            //
                        } else {
                            $paso = $this->permisoServicioIniciarSesion($usuario->servicios);
                            /* if ( !$this->permisoServicioIniciarSesion($usuario->servicios) ){
                                return json_encode(array('error' => 51,'mensaje' => "El usuario no tiene permiso para acceder a este portal."));
                            } */
                        }
                        //
                        if ( !$paso ){
                            return json_encode(array('error' => 51,'mensaje' => "El usuario no tiene permiso para acceder a este portal."));
                        }
                    }

                    // SE VALIDA QUE EL USUARIO QUE INTENTA INGRESAR TIENE IV
                    /* if ( count($usuario->servicios) == 1 ){
                        if ( $usuario->servicios[0]->id_producto == env('IV_PRODUCTO') && Session::get('webdata')['servicio_contratado'] != env('IV_PRODUCTO') ){
                            return json_encode(array('error' => 50,'mensaje' => "Para ingresar a Inquiro Vitae por favos diríjase a www.inquirovitae.com"));
                        }
                    } */
                    // LOS CLIENTES DE INQUIRO SOLAMENTE PUEDEN INGRESAR POR INQUIRO

                    Session::put('servicio_actual',$servicio_actual);
                    Session::put('servicio_actual_nombre',$servicio_actual_nombre);
                    
                    /* Fidecheck Online */
                    $prodcli = DB::select('EXEC dbo.LN_cliente_productos_ ?,?,?,?,?,?,?', array('search', $cliente[0]->client_id, null, null, null, null, $usuario->user_id));
                    $usuario->tiene_fidecheck_online = '0';
                    $usuario->tiene_inf_solo_brief = '0';
                    $usuario->tiene_historial_acciones = '0';
                    /*$usuario->tiene_iterceros = '0';
                    foreach ( $productos_usuario as $key => $value){
                        if ($value->id_producto == '102'){
                            $usuario->tiene_iterceros = '1';
                        }
                    }*/
                    //----
                    foreach ( $prodcli as $key => $value){
                        if ($value->producto_id == 'fidecheckonline'){
                            $usuario->tiene_fidecheck_online = '1';
                        }
                        if($value->producto_id == 'graficosDashboard' && $value->activo == 1 ) {
                            $usuario->dashboard_generico = '1';
                        }
                        if ($value->producto_id == 'soloBrief'){
                            $usuario->tiene_inf_solo_brief = '1';
                        }
                        if ($value->producto_id == 'historialAcciones'){
                            $usuario->tiene_historial_acciones = '1';
                        }
                    }
                    //--------------------

                    $led_control_ingreso = false;
                    /* Subcontratistas */ 
                    if ($usuario->acceso_led) {
                        $ci = SQLConnection::backendStoreProcedure('LN_cliente_productos_', array('CONTROL_INGRESO', $usuario->cliente['client_id'], NULL, NULL, NULL, NULL, NULL, NULL), 'select');
                        $led_control_ingreso = (!empty($ci)) ? true : false;
                        
                    }
                    $usuario->led_control_ingreso = $led_control_ingreso;


                    // INQUIRO VITAE
                    $iv_access = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('IV_PRODUCTO'), $usuario->user_id));
                    $usuario->acceso_iv = (!empty($iv_access)) ? true : false;

                    // SAAS
                    $acceso_saas = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('SAAS_PRODUCTO'), $usuario->user_id));
                    $usuario->acceso_saas = (!empty($acceso_saas)) ? true : false;
                    

                    /// IMPERIUM
                    $impe_access = false;
                    // si el cliente del tiene Imperium, y opcionalmente control de acceso
                    $imperium = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('IMPE_PRODUCTO'), $usuario->user_id));                    
                    //--- PERMISOS DE LAS SECCIONES QUE TIENEN EL CLIENTE
                    $usuario_secciones_permisos = DB::selectOne('EXEC dbo.clientes_usuarios_ ?, ?', array($usuario->cliente['client_id'], $usuario->user_id));
                    // dd($usuario_secciones_permisos);
                    //--- CONTROL DE SECCIONES IMPERIUM
                    if (!empty($imperium)) {
                        if ($imperium->cliente_imperium == 1) {
                            // si es cliente de Imperium, el usuario puede tener diferente permiso: control de contratistas, control de acceso, control de documentacion, autorizar excepcion        
                            //---
                            if (!empty($usuario_secciones_permisos)) {
                                $impe_cc = $usuario_secciones_permisos->led_control_contratistas == 1 ? true:false;
                                $impe_ci = $imperium->cliente_acceso == 1 ? ($usuario_secciones_permisos->led_control_acceso == 1 ? true:false) :false;
                                $impe_cd = $usuario_secciones_permisos->led_control_doc == 1 ? true:false;
                                $impe_exc = $imperium->cliente_acceso == 1 ? ($usuario_secciones_permisos->led_autoriza_exc_acceso == 1 ? true:false) :false;
                                //--- Modificacion Control 2022
                                //- Control de seccion 'Dashboard'
                                $impe_dash = $usuario_secciones_permisos->led_dashboard == 1 ? true:false;
                                //- Control de seccion 'Panel de Control'
                                $impe_panel = $usuario_secciones_permisos->led_panel == 1 ? true:false;
                                //---
                                $impe_access = $impe_cc || $impe_ci || $impe_cd || $impe_exc || $impe_dash || $impe_panel;
                            }
                        }
                        if ($impe_access == true) {
                            $usuario->control_contratistas = $impe_cc;
                            $usuario->control_acceso = $impe_ci;
                            $usuario->control_documentos = $impe_cd;
                            $usuario->excepcion_acceso = $impe_exc;
                            $usuario->control_dashboard_impe = $impe_dash;
                            $usuario->control_panel_impe = $impe_panel;
                        }
                    }
                    $usuario->acceso_imperium = $impe_access;
                    //
                    $usuario->led_dashboard = isset($usuario_secciones_permisos->led_dashboard) ? $usuario_secciones_permisos->led_dashboard : 0;
                    $usuario->es_admin = ( isset($usuario_secciones_permisos->admin_user) && $usuario_secciones_permisos->admin_user == '1' ) ? TRUE : FALSE;
                    //---- CONTROL DE SECCIONES INQUIRO
                    if (!empty($iv_access)){
                        if (!empty($usuario_secciones_permisos)){
                            $iv_busqueda = $usuario_secciones_permisos->iv_ingresar_busqueda == 1 ? true:false;
                        }
                        //---
                        if ($iv_access == true) {
                            $usuario->iv_busqueda = $iv_busqueda ?? false;
                        }
                    }
                    //----
                    $user_horario = SQLConnection::backendStoreProcedure('obtener_users_horarios', array($usuario->user_id), 'selectOne');
                    if(!isset($user_horario->respuesta)){
                        return json_encode(array('error' => 100,'mensaje' => "No puede ingresar en éste momento"));
                    }
                    $usuario->user_horario = $user_horario;	
                    $usuario->as_user_id = $usuario->user_id;
                    // cambio de idioma dinamico en base al selector de login
                    // dd($idioma_session_actual);
                    if ( !is_null($idioma_session_actual) && $idioma_session_actual != $usuario->codigo_idioma ){
                        $usuario->codigo_idioma = $idioma_session_actual;
                        SQLConnection::backendStoreProcedure('Idioma_usuario',array('UPD_USER_IDIOMA',$usuario->user_id,$usuario->codigo_idioma));
                    }
                    //
                    Session::put('usuario',$usuario);
                    Session::put('productos_cliente',$productos_cliente);
                    //-----
                    //le agrego la key de servicio contratado para poder leerlo mejor en los controllers ;) LT
                    $usuarios_restricciones_response = SQLConnection::backendStoreProcedure('obtener_usuarios_restricciones', array($usuario->user_id), 'select');
                    $usuarios_restricciones = [];
                    //-----
                    foreach ($usuarios_restricciones_response as $key_ur => $value_ur) {
                        $usuarios_restricciones[$usuarios_restricciones_response[$key_ur]->servicio_contratado][] = $value_ur;
                    }
                    Session::put('usuarios_restricciones',$usuarios_restricciones);
                    /* 
                    //16/06/2022: toma los productos e indicadores habilitados del sp [usuarios_productos_habilitados_] 
                    $productos_habilitados = [];
                    $indicadores_habilitados_usuario = [];
                    $productos_habilitados = SQLConnection::backendStoreProcedure('usuarios_productos_habilitados_', array($usuario->cliente['client_id'],$usuario->user_id,$servicio_actual,'productos'), 'select');
                    Session::put('productos_habilitados',$productos_habilitados);
                    $indicadores_habilitados_usuario = SQLConnection::backendStoreProcedure('usuarios_productos_habilitados_', array($usuario->cliente['client_id'],$usuario->user_id,$servicio_actual,'indicadores'), 'select');
                    Session::put('indicadores_habilitados_usuario',$indicadores_habilitados_usuario);	
                    // Fin 16/06/2022 
                    */
                    // SE DEFINE EL LINK
                    $link = (isset(Session::get('usuario')->servicios[0])) ? Session::get('usuario')->servicios[0]->url.'?id_producto='.Session::get('usuario')->servicios[0]->id_producto : '' ;
                    if( Request::getHttpHost() == env('URL_INFODATA') ){
                        $link = env('LINK_BUSCADOR');
                    } elseif ( Session::get('usuario')->cliente['client_id'] == '738156811' ){
                        $link = '/iv/control-panel';
                    } else {
                        $servicio_contratado = Session::get('webdata')['servicio_contratado'];
                        //----------
                        //
                        if ( isset($usuario->servicios) ){
                            foreach ($usuario->servicios as $key => $value) {
                                if ($value->id_producto == $servicio_contratado){
                                    if ( $value->id_producto == env('IMPE_PRODUCTO') && $client_id == '2046807993' ){
                                        $link = '/imperium/dashboard?id_producto='.$value->id_producto;
                                    } else {
                                        $link = $value->url.'?id_producto='.$value->id_producto;
                                    }
                                    
                                    break;
                                }
                            }
                        }
                    }
                    //
                    Session::put('link_principal',$link);
                    /* -------------------------- */ 
                    /* 14/09/2020*/
                    UserController::obtenerTraduccionesBotones();
                    /* -------------------------- */ 
                    Session::save();
                    /* 14/09/2020 */
                    \Artisan::call('view:clear');
                    //
                    $cookie = \Cookie::get('disclaimer');
                    // para el cliente HireRight tiene permiso
                    if ( $client_id == 738156811 ){
                        $cookie = true;
                    }
                    //
                    return json_encode(array('error' => 0,'mensaje' => "OK",'cookie' => $cookie,'link' => $link, 'session' => Session::get('usuario')));
                    break;
                case '1':
                    return json_encode(array('error' => 1,'u'=>Misc::encrypt($usuario->username),'mensaje' => $usuario->status_message,'cookie' => $cookie));
                    break;
                default:
                    return json_encode(array('error' => 2,'mensaje' => $usuario->status_message,'cookie' => $cookie));
                break;
            }
        }
    }

	public static function obtenerSeccionesHabilitadas($user_id) {
		$secciones_habilitadas 	= SQLConnection::obtenerSeccionesHabilitadasInforme($user_id,ENV('ID_INFORME_COMERCIAL'));
		$secciones_habilitadas_ordenadas = [];
		foreach($secciones_habilitadas as $secciones) {
			$secciones_habilitadas_ordenadas[$secciones->nombre_seccion] = $secciones; 
		}
		return $secciones_habilitadas_ordenadas;
	}

	//Elimina la sesión del usuario, y redirecciona a la home con un parámetro de reconocimiento
	public function cerrarSesion() {
        if ( isset(Session::get('usuario')->user_id) ){
            $user_id = Session::get('usuario')->user_id;
            SQLConnection::cerrarSesion($user_id);
        }
        //
        $this->destruirSesion();
        //
		return redirect('/?ns');
	}

    /**
     * Funcion que destruye
     * la sesion
     * @access private
     * @return void
     */
    private function destruirSesion(){
        Session::flush();
        Session::invalidate(); // borra el archivo de session
        Session::regenerate(); // genera una session nueva
        Session::save();
    }

    /**
     * Funcion que verifica
     * si el registro de webdata
     * fue puesto en la sesion y sino
     * lo agrega
     * @access private
     * @return void
     */
    private function webDataSesion(){
        $webdata = Session::get('webdata');
        //
        if (!$webdata) {
            //$wdata = SQLConnection::backendStoreProcedure('obtener_web_data',array($_SERVER['HTTP_HOST'], env('APP_ID')),'selectOne');
			// Para Testing
            $wdata = SQLConnection::backendStoreProcedure('obtener_web_data',array('client.inquirovitae.com', env('APP_ID')),'selectOne');
            //
            $pers = array(
                'web_id' => $wdata->web_id,
                'web_name' => $wdata->web_name,
                'web_title' => $wdata->web_title,
                'http_host' => $wdata->http_host,
                'uri_logo' => $wdata->uri_logo,
                'uri_icon' => $wdata->uri_icon,
                'uri_css1' => $wdata->uri_css1,
                'uri_css2' => $wdata->uri_css2,
                'uri_js1' => $wdata->uri_js1,
                'copyright' => $wdata->copyright,
                'servicio_contratado' => $wdata->servicio_contratado ,
                'id_plataforma' => $wdata->id_plataforma,
                'app_id' => $wdata->app_id
            );
            Session::put('webdata', $pers);
        }
    }

	//obtener el disclaimer Legal.
	public function obtenerDisclaimer() {
		$acceso_led = Session::get('usuario')->acceso_led ?? 0;
		$acceso_iv = Session::get('usuario')->acceso_iv ?? 0;
		$prod = Session::get('webdata')['id_plataforma'] ?? 'FI'; 
		$disclaimer = SQLConnection::backendStoreProcedure('dbo.obtener_terminos', array($prod), true);
		$id_terminos = $disclaimer->id_terminos ?? 0; 
		Session::put('id_terminos',$id_terminos);
		Session::put('id_plataforma',$prod);
		Session::save();
        
        $link = Session::get('link_principal');
		//-----------
		if(Request::getHttpHost() == env('URL_INFODATA')){
			$link = env('LINK_BUSCADOR');
		}
		//----
        // dd(Session::all());
		return view('disclaimerNew')->with(compact('disclaimer','link'));
	}

    /**
     * Funcion que devuelve si el
     * usuario tiene permiso para 
     * ingresar al portal
     * @access private
     * @param array
     * @return bool
     */
    private function permisoServicioIniciarSesion($servicios){
        $web_servicio = Session::get('webdata')['servicio_contratado'] ?? NULL;
        $permiso = false;
        $es_ic = false; // es informe comercial
        //
        if ( !is_null($web_servicio) && !empty($servicios) ){
            foreach( $servicios as $servicio ){
                if ( $servicio->id_producto == $web_servicio ){
                    $permiso = true;
                    break;
                } elseif ( $servicio->id_producto == env('ID_INFORME_COMERCIAL') ){
                    $es_ic = true;
                    break;
                }
            }
        }
        // si es informe comercial ( se le permite entrar en portales LED )
        if ( $es_ic && $web_servicio == env('LED_PRODUCTO') ){
            $permiso = true;
        }
        //
        return $permiso;
    }

	public static function formLogin() {
        $webdata = Session::get('webdata');
        
        /* if (!$webdata) {
            $wdata = DB::selectOne('EXEC dbo.obtener_web_data ?, ?', array($_SERVER['HTTP_HOST'], env('APP_ID')) );
			
            $pers = array('web_id' => $wdata->web_id,
                                    'web_name' => $wdata->web_name,
                                    'web_title' => $wdata->web_title,
                                    'http_host' => $wdata->http_host,
                                    'uri_logo' => $wdata->uri_logo,
                                    'uri_icon' => $wdata->uri_icon,
                                    'uri_css1' => $wdata->uri_css1,
                                    'uri_css2' => $wdata->uri_css2,
                                    'uri_js1' => $wdata->uri_js1,
                                    'copyright' => $wdata->copyright,
									'servicio_contratado' => $wdata->servicio_contratado ,
                                	'id_plataforma' => $wdata->id_plataforma,
                                    'app_id' => $wdata->app_id);

            Session::put('webdata', $pers);
        } */

		return view('login_formNew');
	}

	// FUNCION ENCARGADA DE CAMBIAR EL COLOR DE FONDO
	public function cambiarDeFondo(){
		if ( isset($_POST['light_dark_mode']) ){
			$modo = 1;	
			Session::forget('modo');
			Session::put('modo',$modo);
			return $modo;
		} else {
			$modo = 0;	
			Session::forget('modo');
			Session::put('modo',$modo);
			return $modo;
		}
	}

    public function autologin(){
        if (isset($_GET['identification'])){
            if ( !is_null(Session::get('usuario')) ) {
                Session::flush();
            }
            $data = explode('|',base64_decode($_GET['identification']));
            $user_id = $data[0]; //el usuario que quiero utilizar para loguearme como el cliente
            $cookie_id = $data[1];
            $cliente_id = $data[2];
            $servicio_contratado = $data[3];
            $as_userid = $data[4]; //usario logueado en backend
            $last_name = $data[5];
            $first_name = $data[6];
            $email = $data[7];
            $username = $data[8];
            $nombre_prod = $data[9];
            // ---
            $usuario = new \stdClass();
            $usuario->first_name = $first_name;
            $usuario->last_name = $last_name;
            $usuario->user_id = $user_id;
            $usuario->as_user_id = $as_userid;
            $usuario->username = $username;

            $cliente = SQLConnection::obtenerCliente(ENV('ID_INFORME_COMERCIAL'),$user_id);
            $cliente_ordenado = [];
            $client_id = $user_id;
            foreach ($cliente as $key => $value) {
                if($key == 'client_id') {
                    $client_id = $value->client_id;
                }
                $cliente_ordenado[$value->id_producto] = $value;
            }
            $secciones = self::obtenerSeccionesHabilitadas($user_id);            
            $secciones = array_change_key_case($secciones, CASE_LOWER);
            $usuario->informe_comercial = false;
            if($secciones){
                $cliente_ordenado[ENV('ID_INFORME_COMERCIAL')]->secciones = $secciones;
                $usuario->informe_comercial = true;
            }
            $usuario->cliente = $cliente_ordenado;
            $usuario->cliente['client_id']	= $client_id;
            //
            $preferencias = SQLConnection::backendStoreProcedure('obtener_preferencias_usuario', array($user_id), true);
            $usuario->preferencias = $preferencias;

            // inicio CHANCHADA LT
            $led_access = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('LED_PRODUCTO'), $user_id));
                    
            $usuario->acceso_led = (!empty($led_access)) ? true : false;
            //fin CHANCHADA LT

            /* 14/09/2020 */
            if (isset($preferencias->codigo_idioma)) {
                $usuario->codigo_idioma = $preferencias->codigo_idioma; 
            } else {
                $usuario->codigo_idioma = 'spa';
            }
                    
            $servicio_actual = env('ID_INFORME_COMERCIAL'); 
            $servicio_actual_nombre = 'COMPACTO FIDELITAS' ;
            $productos_usuario = SQLConnection::backendStoreProcedure('login_info', array('obtener_productos_usuario',$user_id));
            if (sizeof($productos_usuario) > 0) {
                $usuario->servicios = $productos_usuario;
            } else {
                $usuario->servicios = [$servicio_actual];
            }

            Session::put('servicio_actual',$servicio_actual);
            Session::put('servicio_actual_nombre',$servicio_actual_nombre);

            /* Fidecheck Online */
            $prodcli = DB::select('EXEC dbo.LN_cliente_productos_ ?,?,?,?,?,?,?', array('search', $cliente_id, null, null, null, null, $user_id));
            /*
            $usuario->tiene_fidecheck_online = '0';
            //----
            foreach ( $prodcli as $key => $value){
                if ($value->producto_id == 'fidecheckonline'){
                    $usuario->tiene_fidecheck_online = '1';
                    break;
                } else if($value->producto_id == 'graficosDashboard' && $value->activo == 1 ) {
                    $usuario->dashboard_generico = '1';
                }
            }*/

            $usuario->tiene_fidecheck_online = '0';
            $usuario->tiene_inf_solo_brief = '0';
            $usuario->tiene_historial_acciones = '0';
            /*$usuario->tiene_iterceros = '0';
                    foreach ( $productos_usuario as $key => $value){
                        if ($value->id_producto == '102'){
                            $usuario->tiene_iterceros = '1';
                        }
                    }*/
            //----
            foreach ( $prodcli as $key => $value){
                if ($value->producto_id == 'fidecheckonline'){
                    $usuario->tiene_fidecheck_online = '1';
                }
                if($value->producto_id == 'graficosDashboard' && $value->activo == 1 ) {
                    $usuario->dashboard_generico = '1';
                }
                if ($value->producto_id == 'soloBrief'){
                    $usuario->tiene_inf_solo_brief = '1';
                }
                if ($value->producto_id == 'historialAcciones'){
                    $usuario->tiene_historial_acciones = '1';
                }
            }


            //--------------------
            $led_control_ingreso = false;
            /* Subcontratistas */ 
            if ($usuario->acceso_led) {
                $ci = SQLConnection::backendStoreProcedure('LN_cliente_productos_', array('CONTROL_INGRESO', $usuario->cliente['client_id'], NULL, NULL, NULL, NULL, NULL, NULL), 'select');
                $led_control_ingreso = (!empty($ci)) ? true : false;
                
            }
            $usuario->led_control_ingreso = $led_control_ingreso;

            // INQUIRO VITAE
            $iv_access = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('IV_PRODUCTO'), $user_id));
            $usuario->acceso_iv = (!empty($iv_access)) ? true : false;

            // SAAS
            $acceso_saas = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('SAAS_PRODUCTO'), $user_id));
            $usuario->acceso_saas = (!empty($acceso_saas)) ? true : false;
            //$permisos 	= SQLConnection::obtenerPermisos($usuario->user_id);

            /// IMPERIUM
            $impe_access = false;
            // si el cliente del tiene Imperium, y opcionalmente control de acceso
            $imperium = DB::selectOne('EXEC dbo.LN_validar_acceso_usuario ? ,?', array(env('IMPE_PRODUCTO'), $user_id));
            //--- PERMISOS DE LAS SECCIONES QUE TIENEN EL CLIENTE
            $usuario_secciones_permisos = DB::selectOne('EXEC dbo.clientes_usuarios_ ?, ?', array($usuario->cliente['client_id'], $user_id));
            //--- CONTROL DE SECCIONES IMPERIUM
            if (!empty($imperium)) {
                if ($imperium->cliente_imperium == 1) {
                    // si es cliente de Imperium, el usuario puede tener diferente permiso: control de contratistas, control de acceso, control de documentacion, autorizar excepcion
                    //---
                    if (!empty($usuario_secciones_permisos)) {
                        $impe_cc = $usuario_secciones_permisos->led_control_contratistas == 1 ? true:false;
                        $impe_ci = $imperium->cliente_acceso == 1 ? ($usuario_secciones_permisos->led_control_acceso == 1 ? true:false) :false;
                        $impe_cd = $usuario_secciones_permisos->led_control_doc == 1 ? true:false;
                        $impe_exc = $imperium->cliente_acceso == 1 ? ($usuario_secciones_permisos->led_autoriza_exc_acceso == 1 ? true:false) :false;
                        //--- Modificacion Control 2022
                        //- Control de seccion 'Dashboard'
                        $impe_dash = $usuario_secciones_permisos->led_dashboard == 1 ? true:false;
                        //- Control de seccion 'Panel de Control'
                        $impe_panel = $usuario_secciones_permisos->led_panel == 1 ? true:false;
                        //---
                        $impe_access = $impe_cc || $impe_ci || $impe_cd || $impe_exc || $impe_dash || $impe_panel;
                    }
                }
                if ($impe_access == true) {
                    $usuario->control_contratistas = $impe_cc;
                    $usuario->control_acceso = $impe_ci;
                    $usuario->control_documentos = $impe_cd;
                    $usuario->excepcion_acceso = $impe_exc;
                    $usuario->control_dashboard_impe = $impe_dash;
                    $usuario->control_panel_impe = $impe_panel;
                }
            }
            $usuario->acceso_imperium = $impe_access;
            //---- CONTROL DE SECCIONES INQUIRO
            if (!empty($iv_access)){
                if (!empty($usuario_secciones_permisos)){
                    $iv_busqueda = $usuario_secciones_permisos->iv_ingresar_busqueda == 1 ? true:false;
                }
                //---
                if ($iv_access == true) {
                    $usuario->iv_busqueda = $iv_busqueda;
                }
            }
            //----
            $user_horario = SQLConnection::backendStoreProcedure('obtener_users_horarios', array($user_id), 'selectOne');
            if(!isset($user_horario->respuesta)){
                return json_encode(array('error' => 100,'mensaje' => "No puede ingresar en éste momento"));
            }

            $log = SQLConnection::backendStoreProcedure('user_by_cookie', array($cookie_id));
            $productos_cliente = SQLConnection::backendStoreProcedure('login_info', array('obtener_productos_cliente',$user_id));
            $usuarios_restricciones_response = SQLConnection::backendStoreProcedure('obtener_usuarios_restricciones', array($user_id), 'select');
            $usuarios_restricciones = [];
            //-----
            foreach ($usuarios_restricciones_response as $key_ur => $value_ur) {
                $usuarios_restricciones[$usuarios_restricciones_response[$key_ur]->servicio_contratado][] = $value_ur;
            }

            $wdata = DB::selectOne('EXEC dbo.obtener_web_data ?, ?', array($_SERVER['HTTP_HOST'], env('APP_ID')) );
			
            $pers = array('web_id' => $wdata->web_id,
                                    'web_name' => $wdata->web_name,
                                    'web_title' => $wdata->web_title,
                                    'http_host' => $wdata->http_host,
                                    'uri_logo' => $wdata->uri_logo,
                                    'uri_icon' => $wdata->uri_icon,
                                    'uri_css1' => $wdata->uri_css1,
                                    'uri_css2' => $wdata->uri_css2,
                                    'uri_js1' => $wdata->uri_js1,
                                    'copyright' => $wdata->copyright,
									'servicio_contratado' => $wdata->servicio_contratado ,
                                	'id_plataforma' => $wdata->id_plataforma,
                                    'app_id' => $wdata->app_id);

            Session::put('webdata', $pers);
            Session::put('servicio_actual',$servicio_contratado);
            Session::put('servicio_actual_nombre',$nombre_prod);
            Session::put('usuario',$usuario);
            Session::put('productos_cliente',$productos_cliente);
            Session::put('usuarios_restricciones',$usuarios_restricciones);
            Session::save();

            
            if ( $servicio_contratado == env('IV_PRODUCTO')){
                return redirect('/iv/iv-panel-control');
            } else if ( $servicio_contratado == env('LED_PRODUCTO') || $servicio_contratado == env('IMPE_PRODUCTO') ){
                if ( (isset($usuario->control_dashboard_impe) && $usuario->control_dashboard_impe) || (isset($usuario->dashboard_generico) && $usuario->dashboard_generico) ) {
                    return redirect('/led/led-dashboard');
                } else if ( (isset($usuario->control_dashboard_impe) && !$usuario->control_dashboard_impe && $usuario->control_panel_impe) || $usuario->acceso_led) {
                    return redirect('/led/led-panel-control');
                } else if ( isset($usuario->control_dashboard_impe) && !$usuario->control_dashboard_impe && !$usuario->control_panel_impe && $usuario->acceso_imperium) {
                    return redirect('/imperium/control-acceso');
                }                
            }
        }
    }
}
