/// <reference path="relatorio.evolucao.de.venda.js" />
(function () {
    "use strict";

    angular.module('pos').controller('produtoGerenteController', controller);
    controller.$inject = ['$scope', '$window', '$state', '$timeout', 'produtoService', 'entidadeAuxiliarService'];

    function controller($scope, $window, $state, $timeout, produtoService, entidadeAuxiliarService) {
        $scope.$parent.initializeLayout('Produtos');

        //[Inicializa objetos]
        $scope.items = {
            data: [],
            carregando: false,
            vazio: false,
            count: 0,
            filtro: {
                ativo: false,
                chaves: '',
                codigo: '',
                nome: '',
                tipo: '',
                grupo: '',
                subgrupo: '',
                colecao: '',
                linha: '',
                grife: '',
                fabricante: '',
                revenda: null,
                skip: 0,
                take: 20,
                cor: '',
                codigoBarra: '',
                filial: $scope.$parent.config.Filial.Codigo,
                transito: '1',

            },

            filtrar: true,
            totalPecasEstoque: 0,
            totalPecasTransito: 0,
            totalPecasEstoquesTransito: 0,
            carregandoPecas: false
        };

        $scope.setarAba = function (aba) {
            $scope.state.tipoVisualizacao = aba;
        }

        $scope.state = {
            filiais: [],
            tipoVisualizacao: 0,
        }

        $scope.catalogo = false;
        $scope.carregandoInfo = false;
        $scope.carregamentoCompleto = false;

        //[Inicializa funcões]
        $scope.initialize = function () {
            getAllFilial();
        };
        $scope.historyBack = function () {
            $window.history.back();
        };

        $scope.getAll = function () {
            $scope.items.filtro.skip = 0;
            $scope.items.count = 0;
            $scope.items.carregando = true;
            $scope.carregamentoCompleto = false;
            $scope.items.vazio = false;
            produtoService
                .getAllEstoque($scope.items.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {                            
                            angular.copy(angular.fromJson(response.Data), $scope.items.data);                            
                        }

                        $scope.items.carregando = false;
                        $scope.items.vazio = ($scope.items.data == 0);
                        $scope.count();
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.countPecasEstoque = function () {
            $scope.items.carregandoPecas = true;
            $scope.items.totalPecasEstoque = 0;
            $scope.items.totalPecasTransito = 0;
            $scope.items.totalPecasEstoquesTransito = 0;
            produtoService
                .countPecasEstoque($scope.items.filtro)
                .then(
                    function (response) {
                        $scope.items.carregandoPecas = false;
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {                            
                            $scope.items.totalPecasEstoque = response.Data.Estoque;
                            if(response.Data.Transito)
                                $scope.items.totalPecasTransito = response.Data.Transito;
                            debugger
                            $scope.items.totalPecasEstoquesTransito = $scope.items.totalPecasEstoque  + $scope.items.totalPecasTransito ;
                        }
                    },
                    function (err) {
                        $scope.items.carregandoPecas = false;
                        $scope.$parent.toastr.error(err);
                    }
                );
        };
        $scope.count = function () {
            ;
            let count = 0;
            $scope.items.data.forEach(function (item, i) {
                count += item.Estoques.length;
            })
            $scope.items.count = count;
            //produtoService
            //    .countEstoque($scope.items.filtro)
            //    .then(
            //        function (response) {
            //            if (response.Status < 0)
            //                $scope.$parent.toastr.error(response.Message, 'Serviço');
            //            else
            //                $scope.items.count = response.Data;
            //        },
            //        function (err) { $scope.$parent.toastr.error(err); }
            //    );
        };
        $scope.getMore = function () {
            if ($scope.carregandoInfo == true)
                return;

            $scope.items.filtro.skip += $scope.items.filtro.take;
            $scope.carregandoInfo = true;
            produtoService
                .getAllEstoque($scope.items.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            var returnCount = response.Data.length;
                            if (returnCount == 0)
                                $scope.carregamentoCompleto = true;
                            
                            $scope.items.data = $scope.items.data.concat(response.Data);
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                )
                .finally(function () { $scope.carregandoInfo = false; });
        };

        $scope.disableInfiniteScroll = function () {
            var hasNoItens = $scope.items.count == 0;
            var produtosJaCarregados = $scope.carregamentoCompleto;
            return (hasNoItens || produtosJaCarregados);
        }

        $scope.toggleFiltrar = function () {
            $scope.state.filtrar = !$scope.state.filtrar;
        };

        $scope.refresh = function () {
            $scope.getAll();
          
            $scope.countPecasEstoque();
        };

        $scope.pesquisar = function () {
            ;
            $scope.listar = true;
            $scope.toggleFiltrar();
            $scope.refresh();
        };

        $scope.clearFilter = function () {
            $scope.items.filtro.chaves = '';
            $scope.items.filtro.codigo = '';
            $scope.items.filtro.nome = '';
            $scope.items.filtro.tipo = '';
            $scope.items.filtro.grupo = '';
            $scope.items.filtro.subgrupo = '';
            $scope.items.filtro.colecao = '';
            $scope.items.filtro.linha = '';
            $scope.items.filtro.grife = '';
            $scope.items.filtro.fabricante = '';
            $scope.items.filtro.revenda = null;

            $scope.refresh();
        };
        $scope.toggleFilter = function () {
            $scope.items.filtro.ativo = !$scope.items.filtro.ativo;
            if ($scope.items.filtro.ativo)
                $timeout(function () { $('[ng-model$="items.filtro.chaves"]').focus(); });
        };
        $scope.toggleCatalogo = function () {
            $scope.catalogo = !$scope.catalogo;
        };

        var getAllFilial = function () {
            entidadeAuxiliarService
                .getAllFilial()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Serviço");
                        else {
                            response.Data.unshift({ 'Codigo': null, 'Nome': 'Todas' });
                            angular.copy(angular.fromJson(response.Data), $scope.state.filiais);
                        }

                    },
                    function (error) { $scope.$parent.toastr.error(error, "Serviço"); }
                );
        };

        $scope.$watch('carregandoInfo', function(newValue, oldValue) {
            if(oldValue == false && newValue == true)
                $scope.$parent.toastr.info("Carregando novos itens...");
        });
        
        /*Inicializa funções*/
        $scope.initialize();
    }

})();