<?php namespace App\Http\Controllers;

use Request;
use Session;
use App\Custom\SQLConnection;
use App\Custom\Misc;
use App\Custom\Classes\SociedadesHelper;
use Datetime;
use DB;
use Route;
use stdClass;

class TeamsController extends Controller
{
    /////////////////////////////////////
    ////////// PANEL DE TEAMS ///////////
    /////////////////////////////////////

    /** 
     * @access public
     * 
     * Funcion que devuelve el panel de Teams
     * 
     */
    public function panelTeams(){
        $user_id = Session::get('usuario')->user_id;
        //
        $teams = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMS',$user_id), 'select');
        $idiomas = SQLConnection::backendStoreProcedure('LED_idiomas',array('search',null,null,null),'select');
        //
        $paises = SQLConnection::backendStoreProcedure('backend_obtener_paises', array(), 'select');
        // dd($teams);
        foreach($teams as $clave => $team){
            if ( !is_null($team->servicio_contratado) && $team->servicio_contratado == env('IV_PRODUCTO') ){
                unset($teams[$clave]);
                continue;
            } 
            //
            if ( !is_null($team->idioma) ){
                $arrAux = [];
                $team->idioma = explode(',',$team->idioma);
                $team->servicio_contratado = explode(',',$team->servicio_contratado);
                foreach($team->idioma as $idiomaTeam){
                    foreach($idiomas as $idio){
                        if ($idiomaTeam == $idio->idioma){
                            array_push($arrAux, $idio);
                        }
                    }
                }
                $team->idioma = $arrAux;
            }
            //
            if ( !is_null($team->country_code_list)){
                $arrAux = [];
                $team->country_code_list = explode(',',$team->country_code_list);
                foreach($team->country_code_list as $cod_pais){
                    foreach($paises as $pais){
                        if ($cod_pais == $pais->country_code){
                            array_push($arrAux, $pais);
                        }
                    }
                }
                $team->country_code_list = $arrAux;
            }
        }
        $teams = array_values($teams);
        $lista_idiomas = [];
        foreach($idiomas as $idioma){
            $lista_idiomas[$idioma->idioma] = ['nombre' => $idioma->nombre_idioma,'codigo' => $idioma->codigo_iso];
        }
        //
        Traducciones::setBlade('panel_teams');
        //Traducciones::$blade = 'panel_teams';
        $titulo_navbar = Traducciones::get('Panel de Teams');

        // return view('/configuracion-teams/panel_teams_datatable')->with(compact('teams','lista_idiomas','titulo_navbar'));
        return view('/configuracion-teams/panel_teams')->with(compact('teams','lista_idiomas','titulo_navbar','paises'));
    }

    /** 
     * @access public
     * @deprecated
     * 
     * Funcion que devuelve el panel de Teams
     * 
     */
    public function panelTeamsOrg(){
        $user_id = Session::get('usuario')->user_id;
        //
        $teams = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMS',$user_id), 'select');
        //
        foreach($teams as $team){
            if ( !is_null($team->idioma) ){
                $team->idioma = explode(',',$team->idioma);
                $team->servicio_contratado = explode(',',$team->servicio_contratado);
            }
        }
        //
        $lista_idiomas = [];
        $idiomas = SQLConnection::backendStoreProcedure('LED_idiomas',array('search',null,null,null),'select');
        foreach($idiomas as $idioma){
            $lista_idiomas[$idioma->idioma] = ['nombre' => $idioma->nombre_idioma,'codigo' => $idioma->codigo_iso];
        }
        //
        Traducciones::$blade = 'panel_teams';
        $titulo_navbar = Traducciones::get('Panel de Teams');
        //
        return view('/configuracion-teams/panel_teams')->with(compact('teams','lista_idiomas','titulo_navbar'));
    }

    /**
     * 
     *  @access public
     * 
     * FUNCION QUE DEVUELVE EL MODAL DE CONFIRMACION DE CAMBIAR ESTADO
     */
    public function modalcambiarEstadoTeam(){
        if ( isset($_POST['estado']) && isset($_POST['team']) ){
            $estado = Request::input('estado');
            $team = Request::input('team');
            //
            return view('/configuracion-teams/cambiar_estado_team')->with(compact('estado','team'));
        }
    }

    /**
     * @access public
     * 
     * FUNCION QUE ACTIVA O DESACTIVA UN TEAM (CAMBIA EL ESTADO)
     */
    public function cambiarEstadoTeam(){
        if ( isset($_POST['team']) && isset($_POST['estado']) ){
            $user_id = Session::get('usuario')->user_id;
            $estado = Request::input('estado');
            $team = Request::input('team');
            $datos_team = SQLConnection::backendStoreProcedure('LN_Teams_', array('TEAMBYID',$user_id,$team),'selectOne');
            $miembros = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMMEMBER',$user_id,$team),'select');
            //
            if ( $estado == 'D' ){
                // SE DESACTIVA EL TEAM Y SUS MIEMBROS
                SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMS',$user_id,$team,null,null,null,null,$datos_team->servicio_contratado,$datos_team->nombre,$datos_team->descripcion,0,$datos_team->idioma,null,0,null,null,$datos_team->country_code_list),'select');
                //
                SQLConnection::logTrazabilidad('Se desactivó el team: '.$team,'MOD_TEAM',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
                foreach( $miembros as $miembro ){
                    SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMMEMBER',$user_id,$team,null,null,null,$miembro->idTeamMember,null,null,null,0,null),'select');
                    //
                    SQLConnection::logTrazabilidad('Se desactivó el miembro '.$miembro->idTeamMember.' por desactivación del team '.$team,'MOD_TEAM_MEMBER',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
                }
            } elseif ( $estado == 'A' ){
                // SE ACTIVA EL TEAM
                SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMS',$user_id,$team,null,null,null,null,$datos_team->servicio_contratado,$datos_team->nombre,$datos_team->descripcion,1,$datos_team->idioma,null,0,null,null,$datos_team->country_code_list),'select');
                //
                SQLConnection::logTrazabilidad('Se activó el team: '.$team,'MOD_TEAM',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
            }
        }
        return redirect('/configuracion-teams/panel-teams');
    }

    /**
     * @access public
     * 
     * FUNCION QUE DEVUELVE DE EDITAR LOS DATOS DEL TEAM
     */
    public function editTeam(){
        if ( isset($_POST['team']) ){
            $team = Request::input('team');
            $user_id = Session::get("usuario")->user_id;
            //
            $idiomas = SQLConnection::backendStoreProcedure('LED_idiomas',array('search',null,null,null),'select');
            $paises = SQLConnection::backendStoreProcedure('backend_country',array('SELECCIONAR_ACTIVO'));            
            $datos_team = SQLConnection::backendStoreProcedure('LN_Teams_', array('TEAMBYID',$user_id,$team),'selectOne');
            $datos_team->idioma = ( !is_null($datos_team->idioma) ) ? explode(',',$datos_team->idioma) : NULL;
            $datos_team->servicio_contratado = ( !is_null($datos_team->servicio_contratado) ) ? explode(',',$datos_team->servicio_contratado) : NULL;
            $datos_team->country_code_list = ( !is_null($datos_team->country_code_list) ) ? explode(',',$datos_team->country_code_list) : NULL;
            //
            return view('/configuracion-teams/edit_team')->with(compact('datos_team','idiomas','paises'));
        } else {
            return 0;
        }
    }

    /**
     * @access public
     * 
     * FUNCION QUE ACTUALIZA LOS DATOS DEL TEAM
     */
    public function updateTeam(){
        if ( isset($_POST['team']) ){
            $user_id = Session::get("usuario")->user_id;
            $team = Request::input('team');
            $nombre = Request::input('nombre_equipo');
            $descripcion = Request::input('descripcion_equipo');
            $activo = Request::input('activo') ?? 0;
            $idiomas = ( !is_null(Request::input('idiomas')) ) ? implode(',',Request::input('idiomas')) : null;
            $servicios = ( !is_null(Request::input('servicio')) ) ? implode(',',Request::input('servicio')) : null;
            $paises = ( !is_null(Request::input('paises')) ) ? implode(',',Request::input('paises')) : null;
            //
            SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMS',$user_id,$team,null,null,null,null,$servicios,$nombre,$descripcion,$activo,$idiomas,null,0,null,null,$paises),'selectOne');

            SQLConnection::logTrazabilidad('Se modificó el team: '.$team,'MOD_TEAM',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
            echo json_encode(array("error"=>0,"mensaje"=>"El equipo ha sido actualizado"));
        }
        //
        //return redirect('/configuracion-teams/panel-teams');
    }

    /**
     * @access public
     * 
     * FUNCION QUE DEVUELVE LA VISTA DE LA EDICION DE LOS MIEMBROS DEL EQUIPO
     */
    public function teamMembers(){
        if ( isset($_POST['team']) ){
            $user_id = Session::get("usuario")->user_id;
            $team_id = Request::input('team');
            //
            $team = SQLConnection::backendStoreProcedure('LN_Teams_', array('TEAMBYID',$user_id,$team_id),'selectOne');
            $miembros = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMMEMBER',$user_id,$team_id),'select');
            $roles = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTROLES',$user_id), 'select');
            //
            $ruta = '/configuracion-teams/panel-teams';
            $titulo_navbar = 'Miembros';
            // dd($miembros);
            return view('/configuracion-teams/miembros_team')->with(compact('team','miembros','ruta','titulo_navbar','roles'));
        } else {
            return '0';
        }
    }

    /**
     * @access public
     * 
     * FUNCION QUE DEVUELVE EL MODAL DE ALTA MIEMBRO
     */
    public function nuevoMiembro(){
        if ( isset($_POST['team']) ){
            $team = Request::input('team');
            $user_id = Session::get('usuario')->user_id;
            $roles = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTROLES',$user_id), 'select');
            //
            return view('/configuracion-teams/nuevo_miembro')->with(compact('team','roles'));
        }
    }

    /**
     * @access public
     * 
     * FUNCION QUE DA DE ALTA UN MIEMBRO
     */
    public function agregarMiembro(){
        if ( isset($_POST['team']) && isset($_POST['role']) && isset($_POST['usuario']) ){
            $user_id = Session::get('usuario')->user_id;
            $team = Request::input('team');
            $role = Request::input('role');
            $usuario = Request::input('usuario');
            //
            $default = 1;
            //
            if ( !is_null($team) ){
                $miembros = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMMEMBER',$user_id,$team),'select');
                foreach ($miembros as $key => $val) {
                    //
                    if( $val->id_rol == $role && $val->activo == '1' ){
                        $default = 0;
                        break;
                    }
                }
            }
            //
            SQLConnection::backendStoreProcedure('LN_Teams_', array('ADDTEAMMEMBER',$user_id,$team,$role,$usuario,null,null,null,null,null,1,null,null,null,null,$default),'select');

            SQLConnection::logTrazabilidad('Se agregó nuevo miembro al team '.$team,'ADD_TEAM_MEMBER',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
        }
    }

    /**
     * @access public
     * 
     * FUNCION QUE ACTIVA O DESACTIVA UN MIEMBRO DEL TEAM (CAMBIA EL ESTADO)
     */
    public function cambiarEstadoMiembro(){
        if ( isset($_POST['team']) && isset($_POST['estado']) && isset($_POST['miembro']) && isset($_POST['role']) ){
            $user_id = Session::get('usuario')->user_id;
            $estado = Request::input('estado');
            $team = Request::input('team');
            $miembro = Request::input('miembro');
            $default = Request::input('default');
            $role = Request::input('role');
            //
            if ( $estado == 'D' ){
                SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMMEMBER',$user_id,$team,null,null,null,$miembro,null,null,null,0,null,null,null,null,0),'select');
                if ( $default == '1' ){
                    $this->redefinirDefault($team,$role);
                }                                             
            } elseif ( $estado == 'A' ){
                $primerDef = SQLConnection::backendStoreProcedure('LN_Teams_', array('DEFAULTROLETEAMBR', $user_id, $team, $role),'select');
                if ( empty($primerDef) ){
                    SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMMEMBER',$user_id,$team, NULL,NULL,NULL,$miembro,NULL, NULL, NULL,1,NULL,NULL,NULL,NULL,1),'select');   
                } else{
                    SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMMEMBER',$user_id,$team, NULL,NULL,NULL,$miembro,NULL, NULL, NULL,1,NULL,NULL,NULL,NULL,$default),'select');
                }                
            }
            //
            SQLConnection::logTrazabilidad('Se modificó el estado del miembro '.$miembro.' del team '.$team,'MOD_TEAM_MEMBER',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
        }
        return 1;
    }

    /**
     * Funcion que redefine el
     * default de un role en
     * el team
     * (solamente se llama cuando se inactiva un default)
     * @access private
     * @param string|int team
     * @param string|int role
     * @return void
     */
    private function redefinirDefault($team,$role){
        $user_id = Session::get('usuario')->user_id;
        $miembros = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMMEMBER',$user_id,$team),'select');
        //
        if ( !empty($miembros) ){
            foreach ($miembros as $key => $val) {
                //
                if( $val->id_rol == $role && $val->activo == '1' ){
                    SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMMEMBER',$user_id,$team,$role,null,null,$val->idTeamMember,null,null,null,$val->activo,null,null,null,null,1),'select');
                    SQLConnection::logTrazabilidad('Se modificó el miembro default del team '.$team,'MOD_TEAM',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
                    break;
                }
            }
        }
    }

    /**
     * @access public
     * 
     * FUNCION QUE PONE UN MIEMBRO COMO DEFAULT DE SU ROLE EN EL EQUIPO
     */
    public function defaultTeamMemberRole(){
        if ( isset($_POST['team']) && isset($_POST['miembro']) && isset($_POST['role']) ){
            $user_id = Session::get('usuario')->user_id;
            $team = Request::input('team');
            $miembro = Request::input('miembro');
            $role = Request::input('role');
            $activo = Request::input('activo');
            //
            if ( !is_null($team) ){
                $miembros = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMMEMBER',$user_id,$team),'select');
                foreach ($miembros as $key => $val) {
                    // verifica que tengan el mismo id_role
                    if( $val->id_rol == $role && $miembro != $val->idTeamMember){
                        SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMMEMBER',$user_id,$team,null,null,null,$val->idTeamMember,null,null,null,$val->activo,null,null,null,null,0),'select');
                    }
                }
                // Si el miembro esta activo puede ser default
                if($activo == 1){
                    // Se pone isdefault en 1 al miembro elegido.
                    SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITTEAMMEMBER',$user_id,$team,$role,null,null,$miembro,null,null,null,$activo,null,null,null,null,1),'select');
                }else{
                    return "El miembro no esta activo";
                }
            }
            SQLConnection::logTrazabilidad('Se modificó el miembro default del team '.$team,'MOD_TEAM',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
            //
            return '1';
        } else{
            return '0';
        }
    }
    

    /////////////////////////////////////
    ////////// PANEL DE ROLES ///////////
    /////////////////////////////////////

    /** 
     * @access public
     * 
     * Funcion que devuelve el panel de Roles
     * 
     */
    public function panelRoles(){
        $user_id = Session::get('usuario')->user_id;
        //
        $roles = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTROLES',$user_id), 'select');
        // ROLUIDBYID --> usuarios asignados al rol
        // ROLEBYID --> Datos del rol
        // ROLEBYUID --> roles que tiene el usuario
        Traducciones::setBlade('panel_roles');
        $titulo_navbar = Traducciones::get('Panel de Roles');
        foreach ($roles as $rol){
            $rol->created = date_format(date_create($rol->created),'d/m/Y');
            if ($rol->modified != '') {
                $rol->modified = date_format(date_create($rol->modified),'d/m/Y');
            }
        }
        //
        return view('/configuracion-teams/panel_roles')->with(compact('roles','titulo_navbar'));
    }

    /** 
     * @access public
     * @deprecated
     * 
     * Funcion que devuelve el panel de Roles
     * 
     */
    public function panelRolesOrg(){
        $user_id = Session::get('usuario')->user_id;
        //
        $roles = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTROLES',$user_id), 'select');
        // ROLUIDBYID --> usuarios asignados al rol
        // ROLEBYID --> Datos del rol
        // ROLEBYUID --> roles que tiene el usuario
        Traducciones::setBlade('panel_roles');
        $titulo_navbar = Traducciones::get('Panel de Roles');
        //    
        return view('/configuracion-teams/panel_roles')->with(compact('roles','titulo_navbar'));
    }

    /** 
     * @access public
     * 
     * Funcion que devuelve el contenido del modal del panel de Roles
     * 
     */
    public function contenidoRoles(){
        $id_role = Request::input('id-role');
        //dd($this->usuariosRole($id_role));
        return $this->usuariosRole($id_role);
    }

    /** 
     * @access public
     * 
     * Funcion que desactiva el role al usuario.
     * 
     */
    public function activDesactivRole(){
        $accion = Request::input('accion');
        $user_id_role = Request::input('user_role_id');
        $id_role = Request::input('id_role');
        $user_role = Request::input('user_role');
        $user_id = Session::get('usuario')->user_id;
        //--
        if ( $accion == 'D' ){
            $update = SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITROLUID',$user_id,null,$id_role,$user_id_role,$user_role,null,null,null,null,0,null),'select'); 
        } else {
            $update = SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITROLUID',$user_id,null,$id_role,$user_id_role,$user_role,null,null,null,null,1,null),'select');
        }

        SQLConnection::logTrazabilidad('Se modificó el estado del rol-usuario '.$user_id_role,'MOD_ROL_US',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
        //--
        return $this->usuariosRole($id_role);
    }

    /**
     * @access private
     * @param string el id del role
     * 
     * FUNCION QUE DEVUELVE EL MODAL DE USUARIOS DEL ROL
     */
    private function usuariosRole($id_role){
        $user_id = Session::get('usuario')->user_id;
        $usuarios_disponibles = SQLConnection::backendStoreProcedure('LN_Blue',array('USERS_BACK',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,env('PLATAFORMA')));
        // $usuarios_disponibles = SQLConnection::backendStoreProcedure('LN_Blue',array('USERS_BACK',NULL,NULL,NULL));
        $usuarios = SQLConnection::backendStoreProcedure('LN_Teams_', array('ROLUIDBYID',$user_id,null,$id_role), 'select');        
        //
        foreach( $usuarios as $user ){
            foreach( $usuarios_disponibles as $clave_usuario => $usu_disp ){
                if ( $user->id_usuario == $usu_disp->user_id ){
                    unset($usuarios_disponibles[$clave_usuario]);
                }
            }
        }
        
        // ROLUIDBYID --> usuarios asignados al rol
        return view('/configuracion-teams/modal_contenido_roles')->with(compact('usuarios','usuarios_disponibles','id_role'));
    }

    /**
     * @access public
     * 
     * FUNCION QUE ASIGNAR UN USUARIO AL ROL
     */
    public function asignarUsuario(){
        $id_role = Request::input('id_role');
        $usuario = Request::input('usuario');
        $user_id = Session::get('usuario')->user_id;
        // SE AGREGA EL USUARIO AL ROLE
        SQLConnection::backendStoreProcedure('LN_Teams_', array('ADDROLUID',$user_id,null,$id_role,$usuario,null,null),'select');

        SQLConnection::logTrazabilidad('Se asignó el usuario '.$usuario.' al rol '.$id_role,'ADD_ROL_US',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
        //
        return $this->usuariosRole($id_role);

    }

    /**
     * @access public
     * 
     * FUNCION QUE CAMBIA ESTADO DE UN ROL
     */
    public function estadoRole(){
        $id_role = Request::input('id_role');
        $user_id = Session::get('usuario')->user_id;
        //
        $role = SQLConnection::backendStoreProcedure('LN_Teams_', array('ROLEBYID',$user_id,null,$id_role,null,null),'selectOne');
        // DESACTIVA O ACTIVA        
        if ( $role->activo == '1' ){
            // DESACTIVA
            SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITROLE',$user_id,null,$id_role,null,null,null,null,$role->nombre,$role->descripcion,0,null),'select');
        } else {
            // ACTIVA
            SQLConnection::backendStoreProcedure('LN_Teams_', array('EDITROLE',$user_id,null,$id_role,null,null,null,null,$role->nombre,$role->descripcion,1,null),'select');
        }

        SQLConnection::logTrazabilidad('Se modificó el estado del rol '.$id_role,'MOD_ROL',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
        //
        return redirect('/configuracion-teams/panel-roles');
    }
    

    /////////////////////////////////////
    ////////// ALTA NUEVO ROLE //////////
    /////////////////////////////////////

    /** 
     * @access public
     * 
     * Funcion que devuelve la vista para crear el role .
     * 
     */
    public function crearRole(){
        $user_id = Session::get('usuario')->user_id;
        //$users = SQLConnection::backendStoreProcedure('LN_Blue',array('USERS_BACK',NULL,NULL,NULL));
        $users = SQLConnection::backendStoreProcedure('LN_Blue',array('USERS_BACK',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,env('PLATAFORMA')));
        $ruta = '/configuracion-teams/panel-roles';
        //
        return view('/configuracion-teams/crear_role')->with(compact('users','ruta'));
    }

    /** 
     * @access public
     * 
     * Funcion que crea un nuevo role.
     * 
     */
    public function creacionDelRole(){
        if ( isset($_POST['nombre_role']) && isset($_POST['descripcion_role']) && isset($_POST['usuario']) ){
            $user_id = Session::get('usuario')->user_id;
            $nombre = Request::input('nombre_role');
            $descripcion = Request::input('descripcion_role');
            $usuarios = Request::input('usuario');
            //
            $role = SQLConnection::backendStoreProcedure('LN_Teams_', array('ADDROLE',$user_id,null,null,null,null,null,null,$nombre,$descripcion,1,null),'selectOne');
            //
            SQLConnection::logTrazabilidad('Se agregó nuevo rol','ADD_ROL',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
            //
            foreach( $usuarios as $user ){
                SQLConnection::backendStoreProcedure('LN_Teams_', array('ADDROLUID',$user_id,null,$role->id_rol,$user,null,null),'select');

                SQLConnection::logTrazabilidad('Se asignó el usuario '.$user_id.' a nuevo rol','ADD_ROL',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
            }
            //
        }        
        //
        return redirect('/configuracion-teams/panel-roles');
    }

    
    /////////////////////////////////////
    ////////// ALTA NUEVO TEAM //////////
    /////////////////////////////////////
    
    /**
     * 
     * @access public
     * 
     * FUNCION QUE DEVUELVE LA VISTA PARA DAR DE ALTA UN NUEVO TEAM
     */
    public function nuevoTeam(){
        $user_id = Session::get('usuario')->user_id;
        //
        $roles = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTROLES',$user_id), 'select');
        $idiomas = SQLConnection::backendStoreProcedure('LED_idiomas',array('search',null,null,null),'select');        
        $paises = SQLConnection::backendStoreProcedure('backend_country',array('SELECCIONAR_ACTIVO'));
        $ruta = '/configuracion-teams/panel-teams';
        //
        return view('/configuracion-teams/nuevo_team')->with(compact('roles','idiomas','ruta','paises'));
    }

    /**
     * @access public
     * 
     * FUNCION QUE DEVUELVE LOS USUARIOS QUE PUEDE ACCEDER A ESE ROLE
     */
    public function usuarioPorRole(){
        if ( isset($_POST['role']) ){
            $user_id = Session::get('usuario')->user_id;
            $role = Request::input('role');
            $team = Request::input('team');
            //
            $usuarios = SQLConnection::backendStoreProcedure('LN_Teams_', array('ROLUIDBYID',$user_id,null,$role), 'select');
            //
            if ( !is_null($team) ){
                $miembros = SQLConnection::backendStoreProcedure('LN_Teams_', array('LSTTEAMMEMBER',$user_id,$team),'select');
                foreach( $usuarios as $clave => $usuario ){
                    if ( $usuario->user_rol_activo == 0 ){
                        unset($usuarios[$clave]);
                    } else {
                        foreach( $miembros as $miembro ){
                            if ( $usuario->id_usuario == $miembro->user_id && $usuario->id_rol == $miembro->id_rol ){
                                unset($usuarios[$clave]);
                                break;
                            }
                        }
                    }
                }
            }
            //
            return json_encode($usuarios);
        }
    }

    /**
     * @access public
     * 
     * FUNCION QUE CREAR UN EQUIPO Y AGREGA LOS MIEMBROS
     */
    public function crearTeam(){
        $user_id = Session::get('usuario')->user_id;
        $nombre = Request::input('nombre_equipo');
        $idiomas = Request::input('idiomas');
        $servicio = Request::input('servicio');
        $descripcion = Request::input('descripcion_equipo');
        $numero_miembros = Request::input('numero-miembros');
        //
        $idiomas = implode(',',$idiomas);
        $servicio = ( !is_null($servicio) ) ? implode(',',$servicio) : null;
        $paises = ( !is_null(Request::input('paises')) ) ? implode(',',Request::input('paises')) : null;
        //
        $team_id = SQLConnection::backendStoreProcedure('LN_Teams_', array('ADDTEAMS',$user_id,null,null,null,null,null,$servicio,$nombre,$descripcion,1,$idiomas,null,0,null,null,$paises),'selectOne');
        //
        SQLConnection::logTrazabilidad('Se agrego nuevo team','ADD_TEAM',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
        //
        $primer_miembro_por_rol = [];
        //
        for($i=1;$i <= $numero_miembros; $i++){
            $role = Request::input('roles_usuario_'.$i);
            $usuario = Request::input('usuarios_miembros_'.$i);
            //
            $default = 0;
            if (!isset($primer_miembro_por_rol[$role])) {
                $default = 1;
                $primer_miembro_por_rol[$role] = true;
            }
            SQLConnection::backendStoreProcedure('LN_Teams_', array(
                'ADDTEAMMEMBER',
                $user_id,
                $team_id->id_team,
                $role,
                $usuario,
                null,
                null,
                null,
                null,
                null,
                1,
                null,
                null,
                null,
                null,
                $default
            ), 'select');

            SQLConnection::logTrazabilidad('Se agrego miembro al nuevo team','ADD_TEAM_MEMBER',Session::get('webdata')['id_menu_plataforma'],Session::get('usuario')->user_id,Session::get('webdata')['servicio_contratado']);
        }
        //
        return redirect('/configuracion-teams/panel-teams');
    }

    public function trazabilidad(){
        $nombre_team = Request::input('team_name');
        // $trazabilidad = DB::select("SELECT TOP 50 * FROM trazabilidad WHERE id_plataforma='".Session::get('webdata')['id_menu_plataforma']."' and team = $team ORDER BY created DESC;");
        $trazabilidad = DB::select("SELECT TOP 50 * FROM trazabilidad;");
        //$users = SQLConnection::backendStoreProcedure('LN_Blue',array('USERS_BACK',NULL,NULL,NULL));
        $users = SQLConnection::backendStoreProcedure('LN_Blue',array('USERS_BACK',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,env('PLATAFORMA')));
        
        foreach( $trazabilidad as $k => $log ){
            $trazabilidad[$k]->nombre_persona_mod = null;
            foreach ( $users as $us) {
                if ( $us->user_id == $log->user_id){
                    $trazabilidad[$k]->nombre_persona_mod = $us->usuario;
                }
            }
        }
        
        return view('/configuracion-teams/trazabilidad_teams')->with(compact('trazabilidad','nombre_team'));
    }
}