(function () {
    "use strict";

    angular.module('pos').controller('usuarioDetailController', controller);
    controller.$inject = ['$scope', '$window', '$timeout', '$stateParams', 'usuarioService', 'vendedorService', '$confirmModalDefaults', '$confirm', '$state'];

    function controller($scope, $window, $timeout, $stateParams, usuarioService, vendedorService, $confirmModalDefaults, $confirm, $state) {
        $scope.loading = false;
        $scope.state = { data: [], saveButton: false, invalidMail: false, send: false };
        $scope.auxiliar = { usuario: {} };
        $scope.usuario = {};
        $scope.token = "";
        $scope.modalToken = false;
        $scope.initialize = function () {
            $scope.loading = true;

            $scope.id = $stateParams.codigo;


            if (($scope.id != $scope.$parent.environment.perfil.Codigo && !$scope.$parent.environment.perfil.IndicaGerente) || $stateParams.codigo == "")
                $state.go('state-usuario-detail', { codigo: $scope.$parent.environment.perfil.Codigo })

            vendedorService.get($scope.id)
                .then(
                    function (response) {
                        $scope.loading = false;
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Atenção');
                        else {
                            $scope.auxiliar.usuario = response.Data;
                            angular.copy(angular.fromJson(response.Data), $scope.usuario);
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }
        $scope.ValidarToken = function () {
            vendedorService.ValidateToken($scope.token, $scope.auxiliar.usuario).then(
                    function (response) {
                        $scope.loading = false;
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Atenção');
                        }
                        else {
                            if (response.Data) {
                                $confirmModalDefaults.defaultLabels.title = "Tudo Certo!";
                                $confirm({ text: "Token correto, configuraçao efetuada." })
                                $scope.initialize();
                                $scope.modalToken = false;
                            }
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.salvar = function (usuario, novoAcesso) {
            $scope.loading = true;

            if (!checkCredenciais(usuario, novoAcesso)) {
                $scope.loading = false;
                return;
            }

            usuario = createUsuario(usuario, novoAcesso);

            usuarioService.save($scope.auxiliar.usuario, usuario).then(
                    function (response) {
                        $scope.loading = false;
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Atenção');
                        else {
                            if (response.Data) {
                                $confirmModalDefaults.defaultLabels.title = "Tudo Certo!";
                                $confirm({ text: "Senha alterada com sucesso" })
                                redirect();
                            }
                            else {
                                $confirmModalDefaults.defaultLabels.title = "Atenção!";
                                $confirm({ text: "Sua senha atual está divergente" })
                            }
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }
        $scope.enableSave = function () {
            $scope.state.saveButton = ($scope.auxiliar.usuario.Email != $scope.usuario.Email ? true : false);
        }

        $scope.saveUserWithMail = function () {
            if (!validateMail($scope.auxiliar.usuario.Email))
                return;

            $scope.loading = true;



            $scope.databaseHasMail($scope.auxiliar.usuario.Email, true);

        }


        var saveUserWithValidatedMail = function () {
            usuarioService.saveUserWithMail($scope.auxiliar.usuario).then(
                    function (response) {
                        $scope.loading = false;
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Atenção');
                        else {
                            angular.copy($scope.auxiliar.usuario, $scope.usuario);

                            $confirmModalDefaults.defaultLabels.title = "Tudo Certo!";
                            $confirm({ text: "Email alterado com sucesso" })
                            redirect();
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        var validateMail = function (email) {
            var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

            if (!re.test(email)) {
                $scope.$parent.toastr.error("Este email não é válido", 'Atenção');
                return false;
            }

            return true;
        }

        $scope.databaseHasMail = function (email, send) {
            if (!validateMail(email))
                return;

            $scope.loading = true;
            $scope.state.invalidMail = true;
            $scope.state.send = send;

            usuarioService.validateMail($scope.auxiliar.usuario.Email).then(
                    function (response) {
                        $scope.loading = false;
                        if (response.Data == true) {
                            $scope.$parent.toastr.error("Este email já está registrado em nossa base", 'Atenção');
                        }
                        else {
                            if ($scope.state.send)
                                saveUserWithValidatedMail();
                            $scope.state.invalidMail = false;
                        }
                        $scope.state.send = false;
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.historyBack = function () {
            $window.history.back();
        }

        var redirect = function () {
            if ($scope.$parent.environment.perfil.IndicaGerente)
                $state.go('state-usuario');
            else
                $state.go('state-home');
        }

        var isTitular = function () {
            return $scope.id == $scope.$parent.environment.perfil.Codigo;
        }

        var checkCredenciais = function (usuario, novoAcesso) {
            if (!novoAcesso || !novoAcesso.novaSenha || !novoAcesso.novaSenhaRepetida) {
                $scope.$parent.toastr.error("A nova senha deve ser preenchida", 'Atenção');
                return false;
            }
            if (novoAcesso.novaSenha != novoAcesso.novaSenhaRepetida) {
                $scope.$parent.toastr.error("Nova senha diverge", 'Atenção');
                return false;
            }
            if (isTitular() && !novoAcesso.senhaAntiga) {
                $scope.$parent.toastr.error("Digite sua senha atual", 'Atenção');
                return false;
            }
            return true;
        }

        var createUsuario = function (usuario, novoAcesso) {
            usuario.Acesso = {};
            usuario.Acesso.Senha = novoAcesso.novaSenha;
            usuario.Acesso.SenhaAntiga = (novoAcesso.senhaAntiga ? novoAcesso.senhaAntiga : null);
            return usuario;
        }


        $scope.initialize();
    }

})();