(function () {
    "use strict";

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



    function controller($scope, $window, $state, $timeout, relatorioService, entidadeAuxiliarService) {
        $scope.$parent.initializeLayout('Relatório');
        //imprime o relatório
        $scope.printPdf = function (showDetails) {
            $timeout(function () {
                window.print();
            }, 2000);
        };
        //goTop
        $scope.goTop = function () {
            $window.scrollTo(0, 0);
        };
        //dropdown nas setas
        $scope.changeStatus = function (i) {
            $scope.state.showData[i] = !$scope.state.showData[i];
            $scope.state.init = false;
        }

        //inicialização
        $scope.initialize = function () {
            $scope.clearFilter();
            $scope.refresh();
            $scope.getVendedores();
            $scope.getLinhas();
        };

        //recarregamento
        $scope.refresh = function () {
            $scope.getLinhaProdutos();
            $scope.state.showData = [];
            $scope.state.init = true;
            //  $scope.setVendedorFiltro()
            //  $scope.getVendedores();
        };

        //inicia os objetos
        $scope.exibeTrocas = false;
        $scope.state = {
            produtos: {
                chart: { data: [], carregando: false, vazio: true },
                report: { data: [], carregando: false, vazio: true },
                filtro: { ativo: false }
            },
            carregando: 0,
            showData: [],
            init: true,
        }

        //Mostra as linhas do filtro
        //$scope.setVendedorFiltro = function () {

        //    var vendedor = angular.copy($scope.state.vendedor);
        //    var vendedorString = '';

        //    if (vendedor == null)
        //        vendedor = 'Todos';
        //    else
        //        vendedorString = $scope.state.vendedor;

        //    $scope.state.vendedor = vendedorString;
        //}


        $scope.getLinhaProdutos = function () {
            $scope.state.carregando  += 1;
            $scope.state.produtos.report.carregando = true;
            $scope.state.produtos.report.vazio = false;

            $scope.state.produtos.filtro.troca = $scope.exibeTrocas;

            relatorioService
                .getLinhaProdutos($scope.state.produtos.filtro)
                .then(                
                    function (response) {
                        $scope.state.carregando -= 1;
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                            console.error(response.Exception);
                        }
                        else {
                            angular.copy(angular.fromJson(response.Data), $scope.state.produtos.report.data);
                            $scope.state.produtos.report.vazio = (!response.Data || response.Data.length == 0);
                        }
                            $scope.state.produtos.report.carregando = false;
                        },
                        function (error) {
                            $scope.state.carregando -= 1;
                            console.error(error);
                            $scope.state.produtos.report.carregando = false;
                    }

                );
        };
        //Trazer os vendedores do filtro
        $scope.getVendedores = function () {
            entidadeAuxiliarService
                .getAllVendedor()
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Não foi possível carregar o vendedor disponíveis');
                            console.error(response.Exception);
                        }
                        else {
                            $scope.state.vendedores = response.Data;
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Não foi possível carregar o vendedor disponíveis');
                    }
                );
        }

        //Trazer as linhas do filtro
        $scope.getLinhas = function () {
            entidadeAuxiliarService
                .getAllLinhasFiltradas()
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Não foi possível carregar a linha disponível');
                            console.error(response.Exception);
                        }
                        else {
                            $scope.state.linhas = response.Data;
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Não foi possível carregar a linha disponível');
                    }
                );
        }



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

        //$scope.setTerminal = function () {
        //    $scope.state.produtos.filtro.codigoTerminal = $scope.$parent.config.Terminal.Codigo;
        //};


        $scope.getSum = function (data) {
            if (!data)
                return 0;
            var sum = 0;
            for (var i = 0; i < data.length; i++)
                sum += data[i].Total;
            return sum;
        }

        $scope.toggleFilter = function () {
            $scope.state.produtos.filtro.ativo = !$scope.state.produtos.filtro.ativo;
        };
        $scope.clearFilter = function () {
            $scope.state.produtos.filtro = {
                emissao: {
                    de: new Date((new Date()).setHours(0, 0, 0, 0)),
                    ate: null
                },
                vendedor: '',
                linha: '',
            }
            $scope.refresh();
        };

        function getDateWithoutTime(date) {

            var dateObj = new Date(date);
            var dateWithoutTime = dateObj.toLocaleDateString();

            return dateWithoutTime;
        }

        var validaData = function (data) {
            if (!data)
                return true;
            var hoje = new Date((new Date()).setHours(0, 0, 0, 0));
            var dias = dateDiferencaEmDias(data, hoje);
            return dias <= 30;
        }

        var dateDiferencaEmDias = function (a, b) {
            // Descartando timezone e horário de verão
            var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
            var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

            return Math.floor((utc2 - utc1) / (1000 * 60 * 60 * 24));
        }

        $scope.initialize();

    }

})();