(function () {
    "use strict";

    angular.module('pos').controller('fechamentoCaixaController', controller);
    controller.$inject = ['$scope', '$window', '$q', '$timeout', 'caixaService', '$filter', 'configService', 'entidadeAuxiliarService'];

    function controller($scope, $window, $q, $timeout, caixaService, $filter, configService, entidadeAuxiliarService) {

        $scope.state = { data: [], pgtos: [] };

        var initialize = function () {
            $scope.getCaixas();
            getFormasPgto();
        }

        $scope.getCaixas = function () {
            caixaService
                .getCaixas()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.info(response.Message, "Serviço");
                        else {
                            $scope.state.data = response.Data;
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(response.Message, "Serviço");
                    }
                );
        }

        $scope.saveFechamentoCaixaLoja = function () {
            caixaService
                .saveFechamentoCaixaLoja($scope.state.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.info(response.Message, "Serviço");
                        else {
                            $scope.state.data = response.Data;
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(response.Message, "Serviço");
                    }
                );
        }

        var getFormasPgto = function () {
            entidadeAuxiliarService
                .getAllTipoPagamento()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.info(response.Message, "Serviço");
                        else {
                            $scope.state.pgtos = response.Data;
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(response.Message, "Serviço");
                    }
                );
        }

        $scope.getPgto = function (item, codPgto) {

            var hasItem = $.grep(item.Conferencia, function (e) { return e.TipoPagamento.Codigo == codPgto; });
            if (hasItem && hasItem.length > 0)
                return hasItem[0].ValorEmCaixa;
            return 0;
        }

        $scope.exibirLinha = function (item, indice) {
            $scope.LinhaSelecionada = indice;
            $scope.state.data[indice].ExibeLinha = !$scope.state.data[indice].ExibeLinha;

            caixaService
                .getConferenciaCaixa(item)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.info(response.Message, "Serviço");
                        else {
                            $scope.state.data[indice].Conferencia = response.Data.Conferencia;
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(response.Message, "Serviço");
                    }
                );
        }

        $scope.getReferenciaPagamentoPgto = function (item, tipoPgto, indice, indiceConferencia) {
            if (tipoPgto == "D")
                return;
            $scope.caixaIndice = indice;
            $scope.indiceConferencia = indiceConferencia;
            $scope.state.data[$scope.caixaIndice].Conferencia[$scope.indiceConferencia].ExibeLinha = !$scope.state.data[$scope.caixaIndice].Conferencia[$scope.indiceConferencia].ExibeLinha;
            caixaService
                .getConferenciaCaixaPgto(item, tipoPgto)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.info(response.Message, "Serviço");
                        else {
                            var teste = $scope.state.data[$scope.caixaIndice].Conferencia[$scope.indiceConferencia]
                            $scope.state.data[$scope.caixaIndice].Conferencia[$scope.indiceConferencia].pgtos = response.Data;
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(response.Message, "Serviço");
                    }
                );
        }

        
        initialize();
    }

})();