(function () {
    'use strict';

    angular.module('app')
        .directive('painelfinalservico', painelFinalServico);


    painelFinalServico.$inject = ['$timeout', '$interval', 'CompartilharScope', 'UtilService', 'ItinerariosFormatados', '$compile'];


    function painelFinalServico($timeout, $interval, CompartilharScope, UtilService, ItinerariosFormatados, $compile) {
        var directive = {
            restrict: 'AE',
            replace: true,
            link: link,
            templateUrl: urlGlobal + 'ViewsAngular/Terminais/PainelFinal/PainelFinalServico.html'
        };

        return directive;

        function link(scope, element, attrs) {
            scope.rptBegin = 0;

            scope.bindColResizable = function (enable) {
                if (enable) {
                    element.resizableColumns();
                }
                else {
                    element.resizableColumns('destroy')
                }
            }

            // Observa os eventos recebidos no Objeto 'itinerarios'
            // se houver mudança, atualiza o Objeto 'itinerariosFormatados' e qtd de páginas
            scope.$watchCollection("itinerarios", function itinerariosChange(newValue, oldValue) {
                if (scope.modoDeEdicao) return;

                if (newValue != oldValue) {
                    var formatar = oldValue === undefined;
                    scope.refreshUI(formatar);
                }
            });

            //setInterval(limparItinenarios, 30000);

            //function limparItinenarios() {
                
            //    var itinerarios = Object.assign([], scope.itinerarios);

            //    if (Object.keys(itinerarios).length > 0) {

            //        itinerarios.forEach(o => o.PrevisoesChegada = o.PrevisoesChegada.filter(p => new Date(p.Previsao) > new Date()));

            //        scope.itinerarios = itinerarios.filter(o => o.PrevisoesChegada.length > 0);
            //    }
            //}

            // Observa as alterações da variavel 'TempoPaginacao' das configurações do painel
            scope.$watch('TempoPaginacao', function tempoPaginacaoChange(newValue, oldValue) {
                if (scope.TempoPaginacao) {
                    $interval.cancel(scope.timerPainel);
                    scope.timerPainel = $interval(nextPage, scope.TempoPaginacao);
                }
            });


            // Atualiza interface a cada alteração das configurações do painel
            scope.refreshUI = function (formatar) {
                if (!scope.Exibe) return;

                var exibeObj = scope.Exibe;
                var originalObj = scope.itinerarios;

                // Calcula a Qtd de Páginas de acordo com o tamanho da lista de itinerarios 
                // e qtd de itens a serem exibidos por página (10 ou 12 de acordo com a config do rodapé).
                scope.totalPages = Math.ceil(scope.itinerarios.length / scope.itemsPerPage);

                // monta um novo objeto com a formatação correta para interface. (Factory: Service/Util/FormatarObjetosPainel.js)
                //if (formatar){
                scope.itinerariosFormatados = ItinerariosFormatados.formatar(originalObj, exibeObj);
                //}
            }

            // Roda a paginação
            function nextPage() {
                if (scope.currentPage < scope.totalPages) {
                    scope.rptBegin = scope.rptBegin + scope.itemsPerPage;
                    scope.currentPage++;
                } else {
                    scope.rptBegin = 0;
                    scope.currentPage = 1;
                }
            }

        }
    }
})();