/* global angular, page_title, Noty */

angular.module("app").controller('UsuariosListCtrl', [
    '$scope',
    '$state',
    '$window',
    'uDataParamsTools',
    'UsuariosService',
    'RolesService',
    function ($scope, $state, $window, uDataParamsTools, UsuariosService, RolesService) {
        $window.document.title = page_title + " :: Usuarios";
        localStorage.setItem("app_last_state", JSON.stringify({state: $state.current.name, params: null}));
        $scope.show_list = false;
        $scope.usuarios = [];
        $scope.total_usuarios = 0;
        $scope.by_page = 20;
        $scope.roles = [];
        $scope.filter_form = {
            status: {alias: 'usuarios.status', default: '1'},
            identificador: {alias: 'empleados.identificador'}
        };

        $scope.inactivateUsuario = function (usuario) {
            UsuariosService.inactivateUsuario(usuario.id).then(function () {
                showUsuarioInactivoMessage(usuario);
                getAllUsuarios();
            });
        };
        $scope.reactivateUsuario = function (usuario_id) {
            UsuariosService.reactivateUsuario(usuario_id).then(function () {
                getAllUsuarios();
            });
        };
        $scope.submit = function (usuario) {
            var data_send = {'usuario_id': usuario.id};
            UsuariosService.create(data_send).then(function () {
                getAllUsuarios();
            });
        };
        function iniFormFilter() {
            RolesService.getAllRoles().then(function (data_response) {
                $scope.roles = data_response.roles;
            });
        }
        function getAllUsuarios() {
            UsuariosService.getAllUsuarios($scope.by_page, uDataParamsTools.get_page_order_and_filters_for_rest($scope.filter_form)).then(function (data_response) {
                $scope.usuarios = angular.copy(data_response.usuarios);
                $scope.total_usuarios = data_response.total_usuarios;
                $scope.show_list = true;
            });
        }
        iniFormFilter();
        getAllUsuarios();
        function showUsuarioInactivoMessage(usuario) {
            new Noty({
                theme: 'bootstrap-v4',
                type: 'info',
                text: 'Has inactivado al usuario <strong>' + usuario.username + '</strong>, &iquest;deseas reactivarlo?',
                layout: 'bottomCenter',
                timeout: 5000,
                buttons: [
                    Noty.button('<i class="fa fa-reply"></i>', 'btn btn-sm btn-outline-success float-right', function () {
                        Noty.closeAll();
                        $scope.reactivateUsuario(usuario.id);
                    })
                ]
            }).show();
        }
    }
]);

angular.module("app").controller('UsuariosAgregarCtrl', [
    '$scope',
    '$state',
    '$window',
    'UsuariosService',
    'EmpleadosService',
    'RolesService',
    'validationManager',
    function ($scope, $state, $window, UsuariosService, EmpleadosService, RolesService, validationManager) {
        $window.document.title = page_title + " :: Agregar usuario";
        localStorage.setItem("app_last_state", JSON.stringify({state: $state.current.name, params: null}));
        $scope.action = 'create';
        $scope.form_usuario = {empleado_id: "", username: ""};
        $scope.form_search_empleado = {nombre: ""};
        $scope.empleados = [];
        $scope.empleado_selected = null;
        $scope.show_form = false;
        $scope.show_search_form = true;
        $scope.roles = [];
        RolesService.getAllRolesActivos().then(function (data_response) {
            $scope.roles = data_response.roles;
        });
        $scope.buscarEmpleado = function () {
            EmpleadosService.searchEmpleadoByNombre(angular.copy($scope.form_search_empleado.nombre)).then(function (data_response) {
                $scope.empleados = data_response.empleados;
                for (var i = 0; i < $scope.empleados.length; i++) {
                    $scope.empleados[i].is_checked = false;
                }
            });
        };
        $scope.select_empleado = function (empleado) {
            $scope.empleado_selected = angular.copy(empleado);
            $scope.form_usuario.empleado_id = $scope.empleado_selected.id;
            $scope.form_usuario.email = $scope.empleado_selected.email;
            $scope.form_search_empleado.nombre = "";
            $scope.empleados = [];
            $scope.searchForm.$setPristine();
            $scope.show_form = true;
        };
        $scope.submit = function () {
            var data_send = angular.copy($scope.form_usuario);
            UsuariosService.create(data_send).then(function () {
                $state.go("main.usuarios_lista");
            });
        };
        $scope.openCancelDialog = function () {
            show_cancel_dialog({
                on_save: function () {
                    //intentara guardar los cambios, pasando antes por la validacion del formulario
                    if (validationManager.validateForm(angular.element(document.querySelector('form')))) {
                        $scope.submit();
                    }
                },
                on_leave: function () {
                    //continua sin guardar y sale del modulo
                    $state.go('main.usuarios_lista');
                }
            });
        };
    }
]);

angular.module("app").controller('UsuariosEditarCtrl', [
    '$scope',
    '$state',
    '$stateParams',
    '$window',
    'UsuariosService',
    'EmpleadosService',
    'RolesService',
    'validationManager',
    function ($scope, $state, $stateParams, $window, UsuariosService, EmpleadosService, RolesService, validationManager) {
        $window.document.title = page_title + " :: Editar usuario";
        localStorage.setItem("app_last_state", JSON.stringify({state: $state.current.name, params: null}));
        $scope.action = 'edit';
        $scope.form_search_empleado = {nombre: ""};
        $scope.empleados = [];
        $scope.empleado_selected = null;
        $scope.roles = [];
        $scope.show_form = false;
        $scope.show_search_form = false;
        RolesService.getAllRolesActivos().then(function (data_response) {
            $scope.roles = data_response.roles;
            UsuariosService.getUsuarioById($stateParams.usuario_id).then(function (data_response) {
                $scope.form_usuario = angular.copy(data_response.usuario);
                EmpleadosService.getEmpleadoById(data_response.usuario.empleado_id).then(function (data_response) {
                    $scope.empleado_selected = data_response.empleado;
                    $scope.show_form = true;
                });
            });
        });
        $scope.submit = function () {
            var data_send = angular.copy($scope.form_usuario);
            UsuariosService.update($stateParams.usuario_id, data_send).then(function () {
                $state.go("main.usuarios_lista");
            });
        };
        $scope.openCancelDialog = function () {
            show_cancel_dialog({
                on_save: function () {
                    //intentara guardar los cambios, pasando antes por la validacion del formulario
                    if (validationManager.validateForm(angular.element(document.querySelector('form')))) {
                        $scope.submit();
                    }
                },
                on_leave: function () {
                    //continua sin guardar y sale del modulo
                    $state.go('main.usuarios_lista');
                }
            });
        };
    }
]);
