(function () {
    "use strict";

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

    function factory($http, $q) {

        var _getEndereco = function (cep) {
            var deferred = $q.defer();
            $http.get('http://viacep.com.br/ws/{0}/json'.replace('{0}', cep))
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getAllEstadoCivil = function () {
            var deferred = $q.defer();
            var response = {
                Data: [
                { ID: 1, Nome: "Solteiro" },
                { ID: 2, Nome: "Casado" },
                { ID: 3, Nome: "Divorciado" },
                { ID: 4, Nome: "Viuvo" }],
                Status: 0,
                Message: ''
            }
            deferred.resolve(response);
            return deferred.promise;
        };
        var _getAllGenero = function () {
            var deferred = $q.defer();
            var response = {
                Data: [
                { ID: 0, Nome: "Feminino" },
                { ID: 1, Nome: "Masculino" }
                ],
                Status: 0,
                Message: ''
            };
            deferred.resolve(response);
            return deferred.promise;
        };
        var _getAllTipoTelefone = function () {
            var deferred = $q.defer();
            var response = {
                Data: [
                //{ ID: 0, Nome: "Celular" },
                { ID: 1, Nome: "Comercial" },
                { ID: 2, Nome: "Residencial" },
                { ID: 3, Nome: "Recado" }
                ],
                Status: 0,
                Message: ''
            };
            deferred.resolve(response);
            return deferred.promise;
        };
        var _getAllStatusMovimentacao = function () {
            var deferred = $q.defer();
            var response = {
                Data: [
                { ID: 0, Nome: "Pendente" },
                { ID: 1, Nome: "Cancelada" },
                { ID: 2, Nome: "Encerrada" },
                { ID: 3, Nome: "Conferida" }
                ],
                Status: 0,
                Message: ''
            };
            deferred.resolve(response);
            return deferred.promise;
        };

        var _getAllTipoCliente = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllTipoCliente')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllEstado = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllEstado')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllVendedor = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllVendedor')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllOperacaoVenda = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllOperacaoVenda')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getOperacoesVendaValida = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetOperacoesVendaValida')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getAllCondicaoPagamento = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllCondicaoPagamento')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllAdministradora = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllAdministradora')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllTipoPagamento = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllTipoPagamento')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllTerminal = function (codigo, ip) {
            var deferred = $q.defer();
            var args = {
                'codigo': codigo,
                'ip': ip
            };
            $http.post('/entidadeauxiliar/GetAllTerminal', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllTerminaisWithoutFilter = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllTerminais')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllLinhasFiltradas = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllLinha')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllFilial = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllFilial')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllFilialTransferencia = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllFilialTransferencia')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getTopFilial = function (chave) {
            var deferred = $q.defer();
            var args = {
                'chave': chave
            };
            $http.post('/entidadeauxiliar/GetTopFilial', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getTopFornecedor = function (chave) {
            var deferred = $q.defer();
            var args = { 'chave': chave }
            $http.post('/entidadeauxiliar/GetTopFornecedor', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getTopClienteAtacado = function (chave) {
            var deferred = $q.defer();
            var args = { 'chave': chave }
            $http.post('/entidadeauxiliar/GetTopClienteAtacado', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getAllTransportadora = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllTransportadora')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getAllTipoLancamentoCaixa = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getalltipolancamentocaixa')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllMotivoCancelamento = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getallmotivocancelamento')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllEspecieSerie = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getallespecieserie')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllTipoMovimentacao = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getalltipomovimentacao')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllTipoMovimentacaoEntrada = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getalltipomovimentacaoentrada')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllTipoMovimentacaoSaida = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getalltipomovimentacaosaida')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllTabelaPreco = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getalltabelapreco')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllSerie = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getallserie')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllFiltroSerie = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getallfiltroserie')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllSerieByEspecie = function (codigoEspecie) {
            var deferred = $q.defer();
            var args = { codigoEspecie: codigoEspecie };
            $http.post('/entidadeauxiliar/getallseriebyespecie', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getAllMigrateCRT = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllMigrateCRT')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllMigrateTipoAmbiente = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllMigrateTipoAmbiente')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllMigrateEncontrarImpressora = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllMigrateEncontrarImpressora')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllMigrateImpressaoCompleta = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllMigrateImpressaoCompleta')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllMigrateMarcaImpressora = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllMigrateMarcaImpressora')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _getAllMigratecRegTribISSQN = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/GetAllMigratecRegTribISSQN')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _savePagamentos = function (tipos, condicoes) {
            var deferred = $q.defer();
            var args = {
                'tiposPagamento': tipos,
                'condicoesPagamento': condicoes,
            };

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

        var _getAllSetor = function () {
            var deferred = $q.defer();
            $http.post('/entidadeauxiliar/getAllSetor')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getTamanhoMaximo = function () {
            var deferred = $q.defer();
            $http.get('/entidadeauxiliar/GetTamanhoMaximo')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getPaymentOperationDiscount = function (codForma, tipoPgto, operacao) {
            var deferred = $q.defer();
            var args = { 'codForma': codForma, 'tipoPgto': tipoPgto, 'operacao': operacao };
            $http.post('/entidadeauxiliar/GetPaymentOperationDiscount', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        return {
            getEndereco: _getEndereco,
            getAllEstadoCivil: _getAllEstadoCivil,
            getAllGenero: _getAllGenero,
            getAllTipoTelefone: _getAllTipoTelefone,
            getAllStatusMovimentacao: _getAllStatusMovimentacao,
            getAllTipoCliente: _getAllTipoCliente,
            getAllEstado: _getAllEstado,
            getAllVendedor: _getAllVendedor,
            getAllOperacaoVenda: _getAllOperacaoVenda,
            getOperacoesVendaValida: _getOperacoesVendaValida,
            getAllCondicaoPagamento: _getAllCondicaoPagamento,
            getAllAdministradora: _getAllAdministradora,
            getAllTipoPagamento: _getAllTipoPagamento,
            getAllLinhasFiltradas: _getAllLinhasFiltradas,
            getAllTerminal: _getAllTerminal,
            getAllTerminaisWithoutFilter: _getAllTerminaisWithoutFilter,
            getAllFilial: _getAllFilial,
            getAllFilialTransferencia: _getAllFilialTransferencia,
            getAllTipoLancamentoCaixa: _getAllTipoLancamentoCaixa,
            getAllMotivoCancelamento: _getAllMotivoCancelamento,
            getAllMigrateCRT: _getAllMigrateCRT,
            getAllMigrateTipoAmbiente: _getAllMigrateTipoAmbiente,
            getAllMigrateEncontrarImpressora: _getAllMigrateEncontrarImpressora,
            getAllMigrateImpressaoCompleta: _getAllMigrateImpressaoCompleta,
            getAllEspecieSerie: _getAllEspecieSerie,
            getAllTipoMovimentacao: _getAllTipoMovimentacao,
            getAllTipoMovimentacaoEntrada: _getAllTipoMovimentacaoEntrada,
            getAllTipoMovimentacaoSaida: _getAllTipoMovimentacaoSaida,
            getAllTabelaPreco: _getAllTabelaPreco,
            getAllSerie: _getAllSerie,
            getAllSerieByEspecie: _getAllSerieByEspecie,
            getAllMigrateMarcaImpressora: _getAllMigrateMarcaImpressora,
            getAllMigratecRegTribISSQN: _getAllMigratecRegTribISSQN,
            savePagamentos: _savePagamentos,
            getAllFiltroSerie: _getAllFiltroSerie,
            getAllSetor: _getAllSetor,
            getTamanhoMaximo: _getTamanhoMaximo,
            getPaymentOperationDiscount: _getPaymentOperationDiscount,
            getTopFilial: _getTopFilial,
            getTopFornecedor: _getTopFornecedor,
            getTopClienteAtacado: _getTopClienteAtacado,
            getAllTransportadora: _getAllTransportadora
        };
    }

})();