(function () {
    "use strict";

    angular.module('pos').controller('relatorioEtiquetaProdutoPadraoController', controller);
    controller.$inject = ['$scope', '$window', 'configService', 'produtoService','$confirm'];

    function controller($scope, $window, configService, produtoService, $confirm) {

        $scope.filtro = {
            romaneio: '',
            estoque: false,
            tabelapreco: null,
            custo: '',
            codigobarra: '',
            quantidade: 0,
            periodofimtroca: null,
            periodoiniciotroca: null,
            tipoproduto: null,
            variacao: null,
            nomeproduto: '',
            referencia: '',
            IndicaUsarReferenciaCodigo : false
        };
          
        $scope.allquantidade = 1;
        $scope.carregando = false;
        $scope.currentPage = 0;
        $scope.pageSize = 10;
        $scope.numberOfPages = function () {
            return Math.ceil($scope.listaProdutos.length / $scope.pageSize);
        };
        $scope.statusPrevisualizar = false;
        $scope.listaProdutos = [];
        $scope.tiposProduto = [];
        $scope.variacoes = [];
        $scope.tabelaprecos = []; 
        $scope.changeMoreCurrence = function () {

            $scope.currentPage = $scope.currentPage + 1;
        };
        $scope.changeCurrence = function () {

            $scope.currentPage = $scope.currentPage - 1;
        };

        $scope.previsualizarimpressao = function () {

            $scope.statusPrevisualizar = true;

        };

        $scope.alteraEstado = function (status) {

             
            angular.forEach($scope.listaProdutos, function (value, key) { 
                value.IndicaUsarReferenciaCodigo = status; 
            }); 
        }

        $scope.salvarimpressaoetiqueta = function () {

            if ($scope.listaProdutos.length === 0) {
                $scope.statusPrevisualizar = false;
                return;
            }

            $scope.carregando = true;
            produtoService.salvarimpressaoetiqueta($scope.listaProdutos).
                then(function (response) {
                    if (response.Status < 0) {
                        $scope.$parent.toastr.error(response.Message, 'Atenção');
                    } else {

                        $scope.$parent.toastr.success("A lista de produtos foi enviada para a Fila de impressão.", 'Sucesso');
                    }
                    $scope.IndicaUsarReferenciaCodigo = false;
                    $scope.listaProdutos = [];
                    $scope.carregando = false;
                    $scope.statusPrevisualizar = false;
                }, function () { 
                    $scope.carregando = false;
                    $scope.$parent.toastr.error("Ocorreu um erro acessar servidor", 'Atenção');

                });
        };

        $scope.gerarfile = function () {

            if ($scope.listaProdutos.length === 0) {
                $scope.statusPrevisualizar = false;
                return;
            }

            $scope.carregando = true;
            produtoService.gerarfile($scope.listaProdutos).
                then(function (response) {
                    if (response.Status < 0) {
                        $scope.$parent.toastr.error(response.Message, 'Atenção');
                    } else { 
                        $scope.$parent.toastr.success("A lista de etiquetas foram geradas com sucesso.Aguarde o download", 'Sucesso');
                        window.location.href = "/produto/DownloadEtiquetas";
                    }
                    $scope.IndicaUsarReferenciaCodigo = false;
                    $scope.listaProdutos = [];
                    $scope.carregando = false;
                    $scope.statusPrevisualizar = false;
                }, function () {
                    $scope.carregando = false;
                    $scope.$parent.toastr.error("Ocorreu um erro acessar servidor", 'Atenção');

                });
        };


        $scope.closeprevisualizar = function () {

            $scope.statusPrevisualizar = false;
        };


        $scope.removeritem = function (index) {

            $scope.listaProdutos.splice(index, 1);
        };


        $scope.alteraallQuantidade = function (value) {

             
            angular.forEach($scope.listaProdutos, function(item){ 
                item.Quantidade = value;

            });
        };

        $scope.pesquisar = function () {

            $scope.carregando = true;
            produtoService.getProdutoImpressaoEtiqueta($scope.filtro).then(function (response) {
                if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Atenção'); }
                else {

                    $scope.filtro.codigobarra = '';
                    $scope.IndicaUsarReferenciaCodigo = false;
                    if (!angular.isUndefined(response.Data.length) && response.Data.length > 0) {


                        for (var i = 0; i < response.Data.length; i++) {
                             

                            var item = $scope.listaProdutos.find(obj => obj.CodigoBarra === response.Data[i].CodigoBarra);


                            if (!angular.isUndefined(item)) {

                                item.Quantidade = item.Quantidade + 1;

                            } else {
                                $scope.listaProdutos.push(response.Data[i]);
                            }
                        }
                    } else {
                        $scope.$parent.toastr.info("Não foi encontrado nenhum resultado para pesquisa realizada.", "Atenção");
                    }

                }
                $scope.carregando = false;
            }, function () {
                $scope.carregando = false;
                $scope.$parent.toastr.error("Ocorreu um erro acessar servidor", 'Atenção');

            }); 
        };

        $scope.confirmepesquisa = function () {

            if ($scope.filtro.tabelapreco == null) {
                $scope.$parent.toastr.error('Necessário selecionar uma tabela de preço.', 'Atenção'); 

                return;
            }

             
                $scope.filtro.dimensao = 0; 
            if ($scope.filtro.romaneio == '' && $scope.filtro.estoque == false && $scope.filtro.referencia == false
                && $scope.filtro.nomeproduto == '' && $scope.filtro.codigobarra == '' && $scope.filtro.variacao == null && $scope.filtro.tipoproduto == null
                && $scope.filtro.periodofimtroca == null && $scope.filtro.periodoiniciotroca == null) {
                $confirm({ text: "Tem certeza que deseja buscar todos os itens da tabela de preço selecionada?", title: "Atenção", ok: "Sim", cancel: "Não" })
                    .then(function () {
                        $scope.pesquisar();
                    });
            } else {
                $scope.pesquisar();
            }
        };

        $scope.initialize = function () {
            $scope.getTabelasPreco();
            $scope.getTipoProduto();
            $scope.getallVariacoes();
        };

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

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

        $scope.getTabelasPreco = function () {
            configService.getAllTabelasPreco()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Atenção'); }
                        else {

                            
                            $scope.tabelaprecos = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };

         
        $scope.getallVariacoes = function () {
            produtoService.getallvariacao()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Atenção'); }
                        else {


                            $scope.variacoes = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };


        $scope.getTipoProduto = function () {
            produtoService.gettipoproduto()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Atenção'); }
                        else { 
                           $scope.tiposProduto = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };


        $scope.getTipoVariacao = function () {
            produtoService.gettipoproduto()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Atenção'); }
                        else {
                            $scope.tiposProduto = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };


        $scope.getFiliais = function () {
            configService.getAllTabelasPreco()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Atenção'); }
                        else {
                            $scope.tabelaprecos = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };


         

        $scope.enterAdicionarEtiqueta = function ($event) {

            $scope.confirmepesquisa();

        };

        $scope.limparprodutos = function () {

            $scope.listaProdutos = [];

        };

        $scope.initialize();
    }

    
    angular.module('pos').filter('startFrom', function () {
        return function (input, start) {
            if (input) {
                start = +start;
                return input.slice(start);
            }
            return [];
        }
    });

})();