(function () {
    'use strict';

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

    contestacoesPendentes.$inject = ['__env', 'setoresServiceFactory', 'utilsFactory'];

    /* @ngInject */
    function contestacoesPendentes(__env, setoresServiceFactory, utilsFactory) {
        let directive = {
            restrict: 'E',
            replace: true,
            templateUrl: __env.appPath + 'scripts/components/contestacoes-pendentes/contestacoes-pendentes.directive.html',
            link: link,
            scope: false
        };

        return directive;

        function link(scope) {
            angular.extend(scope.vm, {
                onChangeNavigationContestacoes: onChangeNavigation,
                navigateContestacaoPendente: navigateContestacaoPendente,
                updateNavigationAttrs: updateNavigationAttrs,
                atualizarIndex: atualizarIndex
            });

            scope.vm.listaContestacoesPendentes = [];
            scope.vm.listaContestacoesPendentesFiltrada = [];
            scope.vm.totalContestacoes = 0;

            let _indexAtualNavegacaoContestacoes = 0;

            setoresServiceFactory.carregarContestacoesPendentes()
                .then(successCarregarContestacoesPendentes)
                .catch(error => console.error(error));


            function successCarregarContestacoesPendentes(result) {
                let parseItemDate = (item) => {
                    item.Data = utilsFactory.formatDateUTC(new Date(item.Data), "dd/MM/yyyy");
                    return item;
                };
                scope.vm.listaContestacoesPendentes = result.data.map(parseItemDate);
                scope.vm.listaContestacoesPendentesFiltrada = scope.vm.listaContestacoesPendentes[0] || [];
                scope.vm.totalContestacoes = result.data.length ? result.data.map(x => x.Setores.length).reduce((total, x) => total + x) : 0;
                updateNavigationAttrs();
            }

            function onChangeNavigation() {
                $('.table-scroll').scrollTop(0);
            }

            function navigateContestacaoPendente(isNext) {
                _indexAtualNavegacaoContestacoes = isNext ? _indexAtualNavegacaoContestacoes - 1 : _indexAtualNavegacaoContestacoes + 1;
                updateNavigationAttrs();

                scope.vm.listaContestacoesPendentesFiltrada = scope.vm.listaContestacoesPendentes[_indexAtualNavegacaoContestacoes];
                scope.vm.onChangeNavigationContestacoes();
            }

            function updateNavigationAttrs() {
                scope.vm.hasNextContestacoesPendentes = scope.vm.listaContestacoesPendentes[_indexAtualNavegacaoContestacoes - 1];
                scope.vm.hasPreviousContestacoesPendentes = scope.vm.listaContestacoesPendentes[_indexAtualNavegacaoContestacoes + 1];
            }

            function atualizarIndex() {
                _indexAtualNavegacaoContestacoes = scope.vm.listaContestacoesPendentes.indexOf(scope.vm.listaContestacoesPendentesFiltrada);
            }
        }
    }
})();
