/* global api_url, angular */

angular.module("app").service("CajaTagService", [
    '$uhttp',
    function ($uhttp) {
        var controller = "caja/";
        
        // Obtener estado actual de la caja
        this.getEstadoActual = function () {
            return $uhttp({
                url: api_url + controller + 'get_estado_actual',
                method: 'GET'
            });
        };

        // Abrir caja
        this.abrirCaja = function () {
            return $uhttp({
                url: api_url + controller + 'abrir_caja',
                method: 'POST'
            });
        };

        // Realizar retiro de caja
        this.retiroCaja = function (data) {
            return $uhttp({
                url: api_url + controller + 'retiro_caja',
                method: 'POST',
                data: data
            });
        };

        // Realizar arqueo de caja
        this.arqueoCaja = function (data) {
            return $uhttp({
                url: api_url + controller + 'arqueo_caja',
                method: 'POST',
                data: data
            });
        };

        // Cerrar caja
        this.cerrarCaja = function (data) {
            return $uhttp({
                url: api_url + controller + 'cerrar_caja',
                method: 'POST',
                data: data
            });
        };

        // Obtener movimientos de caja
        this.getMovimientosCaja = function (params) {
            return $uhttp({
                url: api_url + controller + 'get_movimientos',
                method: 'GET',
                params: params
            });
        };

        // Obtener retiros de caja
        this.getRetirosCaja = function (params) {
            return $uhttp({
                url: api_url + controller + 'get_retiros',
                method: 'GET',
                params: params
            });
        };

        // URLs para exportación e impresión
        this.getExportExcelUrl = function (filters) {
            var queryParams = [];
            
            for (var key in filters) {
                if (filters[key] !== null && filters[key] !== undefined && filters[key] !== '') {
                    // Dar formato a las fechas si son objetos moment
                    if (moment.isMoment(filters[key])) {
                        queryParams.push(key + '=' + encodeURIComponent(filters[key].format('YYYY-MM-DD')));
                    } else {
                        queryParams.push(key + '=' + encodeURIComponent(filters[key]));
                    }
                }
            }
            
            return api_url + controller + 'export_movimientos_excel' + 
                   (queryParams.length > 0 ? '?' + queryParams.join('&') : '');
        };

        // URL para imprimir comprobante de retiro
        this.getUrlPrintRetiro = function (retiro_id) {
            return api_url + controller + 'print_retiro/' + retiro_id;
        };
    }
]);