(function () {
    "use strict";

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

    function controller($scope, relatorioService, entidadeAuxiliarService, $window, $timeout) {
 

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


        var getStyle = function () {
            return "<link href='/content/css/bootstrap.paper.min.css' rel='stylesheet' type='text/css'> " +
                "<link href='/content/css/bootstrap.grid.custom.min.css' rel='stylesheet'> " +
                "<link href='/content/css/font-awesome.min.css' rel='stylesheet' type='text/css'> " +
                "<link href='/content/css/animate.min.css' rel='stylesheet' type='text/css'> " +
                "<link href='/content/css/angular-toast.min.css' rel='stylesheet'> " +
                "<link href='/content/css/material-icons.css' rel='stylesheet'> " +
                "<link href='/content/css/site-lightblue.css' title='prefered' rel='stylesheet' type='text/css'> " +
                "<link href='/content/css/Dev.css' rel='stylesheet'> " +
                "<base href='/'> ";
        }
        $scope.state = {
            data: [],
            terminais: [],
            filtroAtivo: false,
            filtro: {
                resumoDe: null,
                resumoAte: null,
                codigoTerminal: null,
            },
            carregando: false,
            totalOperacoes: 0,
            totalTiposPagamento: 0,
            totalAdministradorasCartao: 0,
            totalVendedores: 0,
            totalMovimentacoesCaixa: 0,
        }

        $scope.initialize = function () {
            clearTotais();
            getTerminais();
            getResumo();
        };

        var clearTotais = function () {
            $scope.state.totalOperacoes = 0;
            $scope.state.totalTiposPagamento = 0;
            $scope.state.totalAdministradorasCartao = 0;
            $scope.state.totalVendedores = 0;
            $scope.state.totalMovimentacoesCaixa = 0;
        }

        var getTerminais = function () {
            entidadeAuxiliarService
                .getAllTerminaisWithoutFilter()
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Não foi possível carregar os terminais disponíveis');
                            console.error(response.Exception);
                        }
                        else {
                            var obj = response.Data;
                            var terminais = obj.map(function (item) {
                                return { Key: item.Codigo, Value: item.Codigo }
                            });
                            terminais.unshift({ Key: 'Todos', Value: null });
                            $scope.state.terminais = terminais;
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Não foi possível carregar os terminais disponíveis');
                    }
                );
        }


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

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

        $scope.absoluteValue = function (value) {
            return Math.abs(value);
        };

        $scope.toggleFilter = function () {
            $scope.state.filtroAtivo = !$scope.state.filtroAtivo;
        }
        $scope.clearFilter = function () {
            $scope.state.filtroAtivo = false;
            $scope.state.filtro = {
                resumoDe: null,
                resumoAte: null,
                codigoTerminal: null
            }
        };
        var setFilteredTerminal = function () {
            var terminal = angular.copy($scope.state.filtro.codigoTerminal);
            var terminalString = '';

            if (terminal == null)
                terminalString = 'Todos';
            else
                terminalString = $scope.state.filtro.codigoTerminal;

            $scope.state.filteredTerminal = terminalString;
        }

        var getResumo = function () {
            $scope.state.carregando = true;
            relatorioService
                .getResumoDoCaixa($scope.state.filtro)
                .then(
                function (response) {
                        $scope.state.data = response.Data;
                        sumAll();
                        //$scope.state.filtro.resumoDe = $scope.state.data.DataInicio;
                        //$scope.state.filtro.resumoAte = $scope.state.data.DataFim;
                        setFilteredTerminal();
                        $scope.state.carregando = false;
                        //$scope.clearFilter();
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Erro');
                        $scope.state.carregando = false;
                    }                    
                );
        }

        var sumAll = function () {
            sumVendaOperacoes();
            sumTiposPagamento();
            sumAdministradorasCartao();
            sumVendedores();
            sumMovimentacoesCaixa();
        }

        var sumVendaOperacoes = function () {
            angular.forEach($scope.state.data.OperacoesDeVenda, function (value, key) {
                $scope.state.totalOperacoes += value;
            });
        }

        var sumTiposPagamento = function () {
            angular.forEach($scope.state.data.TiposPagamento, function (value, key) {
                $scope.state.totalTiposPagamento += value;
            });
        }

        var sumAdministradorasCartao = function () {
            angular.forEach($scope.state.data.AdministradorasCartao, function (value, key) {
                $scope.state.totalAdministradorasCartao += value;
            });
        }

        var sumVendedores = function () {
            angular.forEach($scope.state.data.Vendedores, function (value, key) {
                $scope.state.totalVendedores += value;
            });
        }

        var sumMovimentacoesCaixa = function () {
            angular.forEach($scope.state.data.Movimentacoes, function (value, key) {
                $scope.state.totalMovimentacoesCaixa += value;
            });
        }
                
        $scope.initialize();
    }

})();