(function () {
    "use strict";

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

    function controller($scope, $window, $state, $timeout, produtoService) {
        $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
            }
        };
        $scope.catalogo = true;

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

        $scope.getAll = function () {
            $scope.items.filtro.skip = 0;
            $scope.items.carregando = true;
            $scope.items.vazio = false; 
            produtoService
                .getAll($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);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.count = function () {
            produtoService
                .count($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 () {
            $scope.items.filtro.skip += $scope.items.filtro.take;
            produtoService
                .getAll($scope.items.filtro)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.items.data = $scope.items.data.concat(response.Data);
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        };
        $scope.refresh = function () {
            $scope.getAll();
            $scope.count();
        };
        $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;
        };

        /*Inicializa funções*/
        $scope.initialize();
    }

})();