(function () {
    "use strict";

    angular.module('pos').controller('relatorioPagamentoPorTipoController', controller);
    controller.$inject = ['$scope', '$window', '$timeout', '$state', 'relatorioService', '$http'];

    function controller($scope, $window, $timeout, $state, relatorioService, $http) {
        $scope.$parent.initializeLayout('Relatório');

        $scope.state = {
            textoFiltro: "",
            pagamentos: {
                chart: { data: [], carregando: false, vazio: true },
                report: { data: [], carregando: false, vazio: true },
                filtro: {},
            },
            showData: [],
            init: true,
            restricoes: false,
        }

        $scope.initialize = function () {
            setRestricoesRelatorio();
            $scope.clearFilter();
            //if (!$scope.$parent.config.VendedorVenda || $scope.$parent.environment.perfil.IndicaGerente)
            //    $scope.setTerminal();

            $scope.refresh();
        };

        function getDateWithoutTime(date) {
            var dateObj = new Date(date);
            var dateWithoutTime = dateObj.toLocaleDateString();

            return dateWithoutTime;
        }

        var setRestricoesRelatorio = function () {
            var state = $state.current.name;

            if (state == "state-pagamento-por-tipo")
                $scope.state.restricoes = true;
        }

        var validaData = function (data) {
            if (!data)
                return true;
            var hoje = new Date((new Date()).setHours(0, 0, 0, 0));
            var dias = dateDiferencaEmDias(data, hoje);
            return dias <= 30;
        }

        var dateDiferencaEmDias = function (a, b) {
            // Descartando timezone e horário de verão
            var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
            var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

            return Math.floor((utc2 - utc1) / (1000 * 60 * 60 * 24));
        }


        $scope.changeStatus = function (i) {
            $scope.state.showData[i] = !$scope.state.showData[i];
            $scope.state.init = false;
        };

        $scope.showAllPayments = function () {
            if ($scope.state.pagamentos.report.data) {
                for (var i = 0; i < $scope.state.pagamentos.report.data.length; i++) {
                    $scope.state.showData[i] = true;
                }
            }
        };

        $scope.hideAllPayments = function () {
            if ($scope.state.pagamentos.report.data) {
                for (var i = 0; i < $scope.state.pagamentos.report.data.length; i++) {
                    $scope.state.showData[i] = false;
                }
            }
        };

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

        $scope.setTerminal = function () {
            $scope.state.pagamentos.filtro.codigoTerminal = $scope.$parent.config.Terminal.Codigo;
        };
        
        $scope.printPdf = function (showDetails) {
            $scope.state.pagamentos.filtro.ativo = false;
            if (showDetails == true) $scope.showAllPayments();

            $timeout(function () {
                window.print();
                if (showDetails == true) $scope.hideAllPayments();
            }, 2000);
        };

       


        $scope.chartTicketByTipoPagamento = function () {

             
            $scope.state.pagamentos.chart.carregando = true;
            $scope.state.pagamentos.chart.vazio = false;
            relatorioService
                .chartTicketByTipoPagamento($scope.state.pagamentos.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Carregando gráfico');
                            console.error(response.Exception);
                        }
                        else {
                            angular.copy(angular.fromJson(response.Data), $scope.state.pagamentos.chart.data);
                            $scope.state.pagamentos.chart.vazio = $scope.$parent.tools.buildChart('#chart-pagamento', '', response.Data, true);
                        }
                        $scope.state.pagamentos.chart.carregando = false;
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Ao carregar o gráfico.', 'Comunicação com o servidor');
                        console.error(error);
                        $scope.state.pagamentos.chart.carregando = false;
                    }
                );
        };

        $scope.FormatNumber = function (numero) {
            numero = numero.replace("-", "");
            var pad = "00000000"
            var ret = pad.substring(0, pad.length - numero.length) + numero
            return ret;
        }
        $scope.getTicketByTipoPagamento = function () {
             
            $scope.state.pagamentos.report.carregando = true;
            $scope.state.pagamentos.report.vazio = false;
            relatorioService
                .getPagamentos($scope.state.pagamentos.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                            console.error(response.Exception);
                        }
                        else {
                            angular.copy(angular.fromJson(response.Data), $scope.state.pagamentos.report.data);
                            $scope.state.pagamentos.report.vazio = (!response.Data || response.Data.length == 0);
                        }
                        $scope.state.pagamentos.report.carregando = false;
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Ao carregar o gráfico.', 'Comunicação com o servidor');
                        console.error(error);
                        $scope.state.pagamentos.report.carregando = false;
                    }
                );
        };
        $scope.getSum = function (data) {
            var sum = 0;
            for (var i = 0; i < data.length; i++)
                sum += data[i].Valor;
            return sum;
        }

        $scope.toggleFilter = function () {
            $scope.state.pagamentos.filtro.ativo = !$scope.state.pagamentos.filtro.ativo;
        };
        $scope.clearFilter = function () {
            $scope.state.pagamentos.filtro = {
                emissao: {
                    de: new Date((new Date()).setHours(0, 0, 0, 0)),
                    ate: null
                },
                codigoTerminal: '',
                periodoFechamento: '',
                codigoVendedor: '',
                ativo: false,
            }
        };

        $scope.refresh = function () {
            if ($scope.state.restricoes && (!validaData($scope.state.pagamentos.filtro.emissao.de) || !validaData($scope.state.pagamentos.filtro.emissao.ate))) {
                $scope.$parent.toastr.error('Escolha um intervalo de datas que não exceda os últimos 30 dias.');
                return;
            }

            
            $scope.state.pagamentos.filtro.restricoes = $scope.state.restricoes;

            //if ($scope.state.pagamentos.filtro.emissao.de)
            //{
            //    var emissaoDe = $scope.state.pagamentos.filtro.emissao.de;
            //    var emissaoDeNoTime = getDateWithoutTime(emissaoDe);
            //    $scope.state.pagamentos.filtro.emissao.de = emissaoDeNoTime;
            //}

            //if ($scope.state.pagamentos.filtro.emissao.ate)
            //{
            //    var emissaoAte = $scope.state.pagamentos.filtro.emissao.ate;
            //    var emissaoAteNoTime = getDateWithoutTime(emissaoAte);
            //    $scope.state.pagamentos.filtro.emissao.ate = emissaoAteNoTime;
            //}
            $scope.state.textoFiltro = "";
            if ($scope.state.pagamentos.filtro.codigoTerminal)
                $scope.state.textoFiltro += " Terminal " + $scope.state.pagamentos.filtro.codigoTerminal + ". ";


            if ($scope.state.pagamentos.filtro.periodoFechamento)
                $scope.state.textoFiltro += " Periodo " + $scope.state.pagamentos.filtro.periodoFechamento + ". ";

            if ($scope.state.pagamentos.filtro.codigoVendedor)
                $scope.state.textoFiltro += " Vendedor " + $scope.state.pagamentos.filtro.codigoVendedor + ". ";
            

            $scope.chartTicketByTipoPagamento();
            $scope.getTicketByTipoPagamento();
        };

        $scope.initialize();

    }

})();