(function () {
    "use strict";

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

    function controller($scope, relatorioService, $window, $timeout) {
        $scope.state = {
            data: [],
            filtro: {},
            produtos: { report: {} },
            totalizador: {},
            desconto: true,
            carregando: false,
        }

        $scope.initialize = function () {
            $scope.clearFilter();
            $scope.refresh();
        };

        $scope.refresh = function () {
            getAllTickets();
        }

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

        var getAllTickets = function () {
            ;
            $scope.state.carregando = true;

            var emissaoDeModel = angular.element(document.querySelector('#emissaoDeModel'));
            var emissaoAteModel = angular.element(document.querySelector('#emissaoAteModel'));

            if ($scope.state.filtro.emissao.de == undefined && emissaoDeModel.val() != '') {
                $scope.$parent.toastr.error("Date informada invalida", 'Serviço');
                $scope.state.carregando = false;
                return;
            }

            if ($scope.state.filtro.emissao.ate == undefined && emissaoAteModel.val() != '') {
                $scope.$parent.toastr.error("Data informada invalida", 'Serviço');
                $scope.state.carregando = false;
                return;
            }

            relatorioService
                .getConsolidado($scope.state.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.data);
                            $scope.state.produtos.report.vazio = (!response.Data || response.Data.length == 0);
                            $scope.totalizar();
                        }
                        $scope.state.carregando = false;
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Ao carregar o gráfico.', 'Comunicação com o servidor');
                        console.error(error);
                    }
                );
        }

        $scope.toggleDesconto = function () {
            $scope.totalizar();
        }
        $scope.getSum = function (array, column) {
            if (column == "Total")
                console.log("10");
            if (!array || !column)
                return null;
            var sum = 0;
            for (var i = 0; i < array.length; i++)
                sum += (!array[i][column] ? 0 : array[i][column]);

            return sum;
        }

        $scope.totalizar = function () {
            
            var totalPecas = $scope.getSum($scope.state.data, 'Pecas');
            var totalPecasTroca = $scope.getSum($scope.state.data, 'PecasTroca');
            $scope.state.totalizador.TotalLiquido = $scope.getSum($scope.state.data, 'Total');
            $scope.state.totalizador.QuantidadeVendida = totalPecas;
            $scope.state.totalizador.Troca = totalPecasTroca;
            $scope.state.totalizador.QuantidadeLiquida = $scope.getSum($scope.state.data, 'Pecas') - $scope.getSum($scope.state.data, 'PecasTroca');
            $scope.state.totalizador.QuantidadeTickets = $scope.getSumPedidos($scope.state.data, 'Ticket');
            $scope.state.totalizador.PA = ((totalPecas - totalPecasTroca) / $scope.state.data.length).toFixed(2);
            $scope.state.totalizador.TicketMedio = ($scope.getSum($scope.state.data, 'Total') / $scope.state.totalizador.QuantidadeTickets);
        }

        $scope.getSumPedidos = function (array, column) {
            var pedidos = [];
            for (var i = 0; i < array.length; i++) {
                if (pedidos.filter(a => a.Ticket == array[i][column]).length == 0)
                    pedidos.push(array[i]);
            };
            return pedidos.length;
        }



        $scope.getTroca = function (array, column) {
            var sum = 0;
            for (var i = 0; i < array.length; i++) {
                sum += (array[i][column] < 0 ? array[i].Pecas : 0);
            }
            return sum;
        }

        $scope.applyDesconto = function () {

        }

        $scope.toggleFilter = function () {
            $scope.state.filtro.ativo = !$scope.state.filtro.ativo;
        };

        $scope.clearFilter = function () {
            $scope.state.filtro = {
                emissao: {
                    de: new Date((new Date()).setHours(0, 0, 0, 0)),
                    ate: null
                },
                ativo: false,
            }
            $scope.refresh();
        };


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


        $scope.initialize();
    }

})();