<?php

namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;

use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;
use DB;

//use App\Http\Controllers\MenuPermisosController;

class UsersAdminController extends Controller {
    // --------------------------------------------------------------------- //
    // ------------------------- PANEL DE USUARIOS ------------------------- //
    // --------------------------------------------------------------------- //

    // FUNCION QUE MUESTRA EL PANEL DE USUARIOS
    public static function panelUsuarios() {
        $titulo_navbar = 'Panel de Usuarios';
        // un store que devuelva una lista de usuarios para un cliente, sin productos
        $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')));
        //
        foreach ($usuarios_disponibles as $user) {
            $permisos_usuario = [];
            if (str_contains($user->email, ' ')) {
                $user->email = trim($user->email);
            } elseif (str_contains($user->email, "\t")) {
                $user->email = str_replace("\t", "", $user->email);
            }
        }
        $paises = SQLConnection::backendStoreProcedure('backend_obtener_paises', array(), 'select');
        return view('/configuracion-users/panel_usuarios')->with(compact('titulo_navbar'))->with(compact('usuarios_disponibles', 'paises'));
    }

    // FUNCIÓN QUE DEVUELVE EL FORMULARIO DEL MODAL TANTO PARA AGREGAR COMO PARA MODIFICAR LOS DATOS DE USUARIO
    public static function modalAddModUsuarios() {
        $accion = Request::input('accion');
        $user_id = ($accion == 'A') ? null : Request::input('user_id');
        $usuario = null;
        if ($accion != 'A') {
            $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')));

            foreach ($usuarios_disponibles as $user) {
                if ($user_id == $user->user_id) {
                    $usuario = $user;
                }
            }
        }
        $paises = SQLConnection::backendStoreProcedure('backend_obtener_paises', array(), 'select');
        return view('/configuracion-users/form_config_nuevo_usuario')->with(compact('accion', 'usuario', 'paises'));
    }

    // FUNCIÓN QUE AGREGA O MODIFICA LOS DATOS DE UN USUARIO
    public function addModUsuario() {
        if (($_POST['accion'] == 'A' || $_POST['accion'] == 'M') && ($_POST['estado_login'] == 'Y' || $_POST['estado_login'] == 'N') && ($_POST['user_id'] == null || Misc::validacionesGenerica($_POST['user_id'], 'numero')) && $_POST['login'] != '' && $_POST['estado_login'] != '' && $_POST['email'] != '' && $_POST['first_name'] != '' && $_POST['last_name'] != '' && $_POST['password'] != '') {

            $accion = Request::input('accion');
            $user_id = ($accion == 'A') ? null : Request::input('user_id');
            $login = Request::input('login');
            $estado_login = Request::input('estado_login');
            $email = Request::input('email');
            $nombre = Request::input('first_name');
            $apellido = Request::input('last_name');
            $password = Request::input('password');
            $pais = Request::input('pais');
            $idioma = Request::input('idioma');
            //
            $es_iv = Request::input('es_iv') ? "10" : null;
            $es_led = Request::input('es_led') ? "47" : null;
            $es_imp = Request::input('es_imp') ? "73" : null;

            $preferencias = [];

            if (!is_null($es_iv)) {
                $preferencias[] = $es_iv;
            }
            if (!is_null($es_led)) {
                $preferencias[] = $es_led;
            }
            if (!is_null($es_imp)) {
                $preferencias[] = $es_imp;
            }

            $preferencias = implode(',', $preferencias);

            SQLConnection::backendStoreProcedure('users_backend', array($accion, $user_id, $login, $estado_login, $email, $nombre, $apellido, $password, $preferencias, $pais, $idioma));

            $texto = ($accion == 'A') ? 'Se creó nuevo usuario' : 'Se modificó usuario: ' . $user_id;
            $acción = ($accion == 'A') ? 'ADD_USER' : 'MOD_USER';

            SQLConnection::logTrazabilidad($texto, $accion, Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado']);
            return 1;
        } else {
            return 0;
        }
    }

    public function permisosUsuario() {
        $usuario = Request::input('usuario');
        $permisos = SQLConnection::backendStoreProcedure('user_menu_acces_', array('LIST_BY_USERID', $usuario, Session::get('webdata')['id_menu_plataforma'], $usuario, null, null), 'select');
        return $permisos;
    }

    public function getPermisosDisponiblesPorUsuario() {
        $usuario = Request::input('usuario');
        $nombre = Request::input('nombre');
        $permisos = SQLConnection::backendStoreProcedure('user_menu_acces_', array('LIST_BY_USERID', $usuario, Session::get('webdata')['id_menu_plataforma'], $usuario, null, null));
        $disponibles = SQLConnection::backendStoreProcedure('user_menu_acces_', array('RESTO_BY_USERID', $usuario, Session::get('webdata')['id_menu_plataforma'], $usuario, null, null));
        $items = SQLConnection::backendStoreProcedure('menu_items_', array('LIST_ITEMS', Session::get('webdata')['id_menu_plataforma'], null, Session::get('usuario')->user_id));

        $aux = [];
        $aux_2 = [];
        $depe = [];
        $permisos_disponibles = [];
        //
        $items_ordenados = [];
        $arreglo_relaciones = [];
        //
        foreach ($items as $item) {
            foreach ($permisos as $pemiso) {
                if ($item->id_menu_item == $pemiso->id_menu_item) {
                    $item->checked = true;
                    break;
                }
            }
            // se arman los arreglos
            $items_ordenados[$item->id_menu_item] = $item;
            if ($item->dependent_item) {
                $arreglo_relaciones[$item->dependent_item][] = $item->id_menu_item;
            }
        }

        return view('/configuracion-users/permisos_usuario')->with(compact('arreglo_relaciones', 'items_ordenados', 'nombre', 'permisos', 'disponibles', 'usuario'));

    }

    // FUNCIÓN QUE AGREGA UN NUEVO PERMISO
    public function addPermisos() {
        if (!empty($_POST['permisos_select'])) {
            $id_user_select = Request::input('usuario');
            $permisos_select = Request::input('permisos_select');
            $lista_permisos = SQLConnection::backendStoreProcedure('user_menu_acces_', array('LIST_BY_USERID', Session::get('usuario')->user_id, Session::get('webdata')['id_menu_plataforma'], $id_user_select, null, null));
            $existe = null;
            foreach ($permisos_select as $k => $perm) {
                foreach ($lista_permisos as $perm_existe) {
                    if ($perm_existe->id_menu_item == $perm && $perm_existe->user_id == $id_user_select) {
                        unset($permisos_select[$k]);
                    }
                }
            }

            if (!empty($permisos_select)) {
                foreach ($permisos_select as $new_perm) {
                    $temp = SQLConnection::backendStoreProcedure('user_menu_acces_', array('ADD_USER_ITEM', $id_user_select, Session::get('webdata')['id_menu_plataforma'], $id_user_select, $new_perm, '1', null));

                    $texto = 'Se creó nuevo permiso';
                    $accion = 'ADD_PERMISSION';

                    SQLConnection::logTrazabilidad($texto, $accion, Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado']);
                }
            } else {
                return 0;
            }
            return 1;
        } else {
            return 0;
        }
    }
}