(function () {
    'use strict';

    angular
        .module('setoresApp')
        .directive('configuracoesSidebar', configuracoesSidebar);

    configuracoesSidebar.$inject = ['__env', 'setoresServiceFactory', 'ngNotify'];

    /* @ngInject */
    function configuracoesSidebar(__env, setoresServiceFactory, ngNotify) {
        let directive = {
            link: link,
            restrict: 'A',
            replace: false,
            scope: false
        };

        return directive;

        function link(scope) {
            angular.extend(scope.vm, {
                configuracaoEmpresaObj: {
                    TipoContestacaoSetor: 'ponto'
                },
                salvarEmpresaConfiguracao: salvarEmpresaConfiguracao,
                abrirSidebarConfiguracoes: abrirSidebarConfiguracoes,
                fecharSidebarConfiguracoes: fecharSidebarConfiguracoes
            });

            setoresServiceFactory.carregarTiposReferencias()
                .then((result) => {
                    scope.vm.listaTiposReferencias = result.data !== 'null' ? result.data : [];

                    setoresServiceFactory.carregarConfiguracaoEmpresa().then((result) =>
                        scope.vm.configuracaoEmpresaObj = result.data !== 'null' ? result.data : {
                            TipoContestacaoSetor: 'ponto',
                            PermitirRecontestar: true
                        }).catch(errorRequest);
                }).catch(errorRequest);

            function abrirSidebarConfiguracoes() {
                scope.vm.openSidebarOuter('Configurações', __env.appPath + 'scripts/partials/sidebar/sidebar-configuracoes.html', fecharSidebarConfiguracoes)
                    .then(() => scope.vm.sidebarOuterOpen = true);
            }

            function fecharSidebarConfiguracoes() {
                scope.vm.sidebarOuterOpen = false;
                scope.vm.closeSidebarOuter();
            }

            function salvarEmpresaConfiguracao() {
                scope.vm.configuracaoEmpresaObj.EmpresasConfigTiposReferencias =
                    scope.vm.listaTiposReferencias.filter(x => x.Checked)
                        .map(x => ({ CodigoTipoReferencia: x.Codigo, Tipo: x.TipoReferencia === 1 ? 'R' : 'C' }));

                setoresServiceFactory.salvarEmpresaConfiguracao(scope.vm.configuracaoEmpresaObj)
                    .then((result) => {
                        if (result.data && result.data.Sucesso) {
                            ngNotify.set(result.data.MensagemSucesso, {
                                type: 'success',
                                sticky: false
                            });
                            scope.vm.configuracaoEmpresaObj = result.data.Objeto;
                        }
                    }).catch(errorRequest);
            }

            function errorRequest(error) {
                console.log(error);
            }
        }
    }

})();
