(function () {
    "use strict";

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

    function factory($http, $q) {

        var _getAllHoje = function (codigoTerminal, periodoFechamento, codigoCaixaVendedor) {
            var args = {
                'codigoTerminal': codigoTerminal,
                'periodoFechamento': periodoFechamento,
                'codigoCaixaVendedor': codigoCaixaVendedor
            };
            var deferred = $q.defer();
            $http.post('/caixa/getallhoje', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getHojeTotais = function (codigoTerminal, periodoFechamento, codigoCaixaVendedor) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'periodoFechamento': periodoFechamento,
                'codigoCaixaVendedor': codigoCaixaVendedor
            };
            $http.post('/caixa/gethojetotais', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _chartHojeByTipoLancamento = function (codigoTerminal, periodoFechamento, codigoCaixaVendedor) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'periodoFechamento': periodoFechamento,
                'codigoCaixaVendedor': codigoCaixaVendedor
            };
            $http.post('/caixa/ChartHojeByTipoLancamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _chartHojeByVendedor = function (codigoTerminal, periodoFechamento, codigoVendedor) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'periodoFechamento': periodoFechamento,
                'codigoVendedor': codigoVendedor
            };
            $http.post('/caixa/ChartHojeByVendedor', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _chartHojeByTipoPagamento = function (codigoTerminal, periodoFechamento, codigoVendedor) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'periodoFechamento': periodoFechamento,
                'codigoVendedor': codigoVendedor
            };
            $http.post('/caixa/ChartHojeByTipoPagamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _chartHojeByDataHora = function (codigoTerminal, periodoFechamento, codigoVendedor) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'periodoFechamento': periodoFechamento,
                'codigoVendedor': codigoVendedor
            };
            $http.post('/caixa/ChartHojeByDataHora', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getPeriodosFechamento = function (codigoTerminal) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal
            };
            $http.post('/caixa/getperiodosfechamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _prepareNew = function () {
            var deferred = $q.defer();
            $http.post('/caixa/preparenew')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _save = function (item) {
            var deferred = $q.defer();
            var args = {
                'item': item
            };
            $http.post('/caixa/save', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _cancel = function (codigo, codigoTerminal, codigoMotivoCancelamento) {
            var deferred = $q.defer();
            var args = {
                'codigo': codigo,
                'codigoTerminal': codigoTerminal,
                'codigoMotivoCancelamento': codigoMotivoCancelamento
            };
            $http.post('/caixa/cancel', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _open = function (codigoTerminal, emissao) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'emissao': emissao
            };
            $http.post('/caixa/open', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _close = function (codigoTerminal, emissao) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'emissao': emissao
            };
            $http.post('/caixa/close', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _checkCaixaAberto = function (codigoTerminal, emissao) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'emissao': emissao
            };
            $http.post('/caixa/checkcaixaaberto', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getAllPayments = function (codigoTerminal, codigoFilial) {
            var deferred = $q.defer();
            var args = {
                'codigoTerminal': codigoTerminal,
                'codigoFilial': codigoFilial,
            };
            $http.post('/caixa/getallpayments', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _setAllPayments = function (conferenciaCega) {
            var deferred = $q.defer();
            var args = {
                'conferenciaCega': conferenciaCega,
            };
            $http.post('/caixa/setallpayments', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _getCaixaConferencia = function () {
            var deferred = $q.defer();

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

        var _getReferenciaPagamento = function (codigoTipoPgto) {
            var deferred = $q.defer();
            var args = { 'codigoTipoPgto': codigoTipoPgto };

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

        var _getReferenciaPagamentoPgto = function (caixa, codigoTipoPgto) {
            var deferred = $q.defer();
            var args = { 'caixa': caixa, 'codigoTipoPgto': codigoTipoPgto };

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

        var _saveConferenciaCaixa = function (caixa) {
            var deferred = $q.defer();

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

        var _getCaixas = function () {
            var deferred = $q.defer();

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

        var _getCaixas = function () {
            var deferred = $q.defer();

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


        var _saveFechamentoCaixaLoja = function (caixas) {
            var deferred = $q.defer();

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

        var _getConferenciaCaixa = function (caixa) {
            var deferred = $q.defer();

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

        var _getConferenciaCaixaPgto = function (caixa, tipoPgto) {
            var deferred = $q.defer();
            var args = { 'caixa': caixa, 'tipoPgto': tipoPgto }

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

        var _terminaisAbertos = function () {
            var deferred = $q.defer();

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


        return {
            getAllHoje: _getAllHoje,
            getHojeTotais: _getHojeTotais,
            chartHojeByTipoLancamento: _chartHojeByTipoLancamento,
            chartHojeByVendedor: _chartHojeByVendedor,
            chartHojeByTipoPagamento: _chartHojeByTipoPagamento,
            chartHojeByDataHora: _chartHojeByDataHora,
            getPeriodosFechamento: _getPeriodosFechamento,
            prepareNew: _prepareNew,
            save: _save,
            cancel: _cancel,
            open: _open,
            close: _close,
            checkCaixaAberto: _checkCaixaAberto,
            getAllPayments: _getAllPayments,
            setAllPayments: _setAllPayments,
            getCaixaConferencia: _getCaixaConferencia,
            getReferenciaPagamento: _getReferenciaPagamento,
            getReferenciaPagamentoPgto: _getReferenciaPagamentoPgto,
            saveConferenciaCaixa: _saveConferenciaCaixa,
            getCaixas: _getCaixas,
            saveFechamentoCaixaLoja: _saveFechamentoCaixaLoja,
            getConferenciaCaixa: _getConferenciaCaixa,
            getConferenciaCaixaPgto: _getConferenciaCaixaPgto,
            terminaisAbertos: _terminaisAbertos,
        };
    }

})();