(function () {
    "use strict";

    angular.module('pos').factory('relatorioService', factory);
    factory.$inject = ['$http', '$q'];

    function factory($http, $q) {

        var _getPagamentos = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor,
                restricoes: (filtro.restricoes == null ? true : filtro.restricoes)
            };
            $http.post('/relatorio/getpagamentos', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getPagamentosCartao = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor,
                restricoes: (filtro.restricoes == null ? true : filtro.restricoes),
            };
            $http.post('/relatorio/getpagamentoscartao', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getVendas = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor,
                troca: filtro.troca,
                restricoes: (filtro.restricoes == null ? true : filtro.restricoes)
            };
            $http.post('/relatorio/getvendas', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getLinhaProdutos = function (filtro) {
            var nome = ""
            var nomeLinha = ""
            if (filtro.vendedor != null)
                nome = filtro.vendedor.Nome
            if (filtro.linha != null)
                nomeLinha = filtro.linha.Nome
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                troca: filtro.troca,
                vendedor: nome,
                linha: nomeLinha
            };
            $http.post('/relatorio/getlinhaprodutos', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getTop5Produtos = function (filtro) {
            var deferred = $q.defer();
            var args = {
                top: 5,
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/gettopnprodutos', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getTop10Produtos = function (filtro) {
            var deferred = $q.defer();
            var args = {
                top: 10,
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/gettopnprodutos', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getTopNProdutos = function (filtro) {
            var deferred = $q.defer();
            var args = {
                top: filtro.take,
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/gettopnprodutos', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getTop5Vendedores = function (filtro) {
            var deferred = $q.defer();
            var args = {
                top: 5,
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/gettopnvendedores', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getTop10Vendedores = function (filtro) {
            var deferred = $q.defer();
            var args = {
                top: 10,
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/gettopnvendedores', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getTopNVendedores = function (filtro) {
            var deferred = $q.defer();
            var args = {
                top: filtro.take,
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/gettopnvendedores', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _chartTicketByVendedor = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor,
                troca: filtro.troca,
                restricoes: (filtro.restricoes == null ? true : filtro.restricoes)
            };
            $http.post('/relatorio/chartticketbyvendedor', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getConsolidado = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/getconsolidado', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _chartTicketByTipoPagamento = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor,
                restricoes: (filtro.restricoes == null ? true : filtro.restricoes)
            };
            $http.post('/relatorio/chartticketbytipopagamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _chartTicketByAdministradoraCartao = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor,
                restricoes: (filtro.restricoes == null ? true : filtro.restricoes),
            };
            $http.post('/relatorio/chartticketbyadministradoracartao', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _chartEvolucaoVendas = function (filtro) {
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/chartevolucaovendas', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _chartEvolucaoVendasByVendedor = function (filtro) {
           
            var deferred = $q.defer();
            var args = {
                emissaoDe: filtro.emissao.de,
                emissaoAte: filtro.emissao.ate,
                codigoTerminal: filtro.codigoTerminal,
                periodoFechamento: filtro.periodoFechamento,
                codigoVendedor: filtro.codigoVendedor
            };
            $http.post('/relatorio/chartevolucaovendasbyvendedor', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getAllNotaContingencia = function (emissaoDe, emissaoAte, skip, take) {
            var deferred = $q.defer();
            var args = {
                'emissaoDe': emissaoDe,
                'emissaoAte': emissaoAte,
                'skip': skip,
                'take': take,
            };
            $http.post('/relatorio/getallnotacontingencia', args)
            .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) {
                    deferred.reject(data);
                });
            return deferred.promise;
        };

        var _getResumoDoCaixa = function (filtro) {
            var deferred = $q.defer();
            var args = {
                'resumoDe': filtro.resumoDe,
                'resumoAte': filtro.resumoAte,
                'codigoTerminal': filtro.codigoTerminal
            };
            $http.post('/relatorio/getresumocaixa', args)
            .success(function (data) {
                deferred.resolve(data);
            })
            .error(function (data, status, headers, config) {
                deferred.reject(data);
            });
            return deferred.promise;
        };

        var _downloadCSV = function (nfnumero, serie, filial) {
            var deferred = $q.defer();

            var args = { nfnumero: nfnumero, serie: serie, filial: filial };

            $http.post('/relatorio/downloadcsv', args)
            .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _xmlPorEmail = function (email, inicio, fim) {
            var deferred = $q.defer();

            var args = { email: email, inicio: inicio, fim: fim };

            $http.post('/relatorio/xmlporemail', args)
            .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        return {
            getPagamentos: _getPagamentos,
            getPagamentosCartao: _getPagamentosCartao,
            getVendas: _getVendas,
            getLinhaProdutos: _getLinhaProdutos,
            getTop5Produtos: _getTop5Produtos,
            getTop10Produtos: _getTop10Produtos,
            getTopNProdutos: _getTopNProdutos,
            getTop5Vendedores: _getTop5Vendedores,
            getTop10Vendedores: _getTop10Vendedores,
            getTopNVendedores: _getTopNVendedores,
            getResumoDoCaixa: _getResumoDoCaixa,
            chartTicketByVendedor: _chartTicketByVendedor,
            chartTicketByTipoPagamento: _chartTicketByTipoPagamento,
            chartTicketByAdministradoraCartao: _chartTicketByAdministradoraCartao,
            chartEvolucaoVendas: _chartEvolucaoVendas,
            chartEvolucaoVendasByVendedor: _chartEvolucaoVendasByVendedor,
            getConsolidado: _getConsolidado,
            getAllNotaContingencia: _getAllNotaContingencia,
            downloadCSV: _downloadCSV,
            xmlPorEmail: _xmlPorEmail,
        };
    }

})();