import { api, apiURL } from '@Services/Api';

/**
 * Servicio para gestionar devoluciones
 */
const returnsService = {
    /**
     * Obtener lista de devoluciones con paginación
     * @param {Object} filters - Filtros de búsqueda (page, q, status, etc.)
     * @returns {Promise}
     */
    async getReturns(filters = {}) {
        return new Promise((resolve, reject) => {
            api.get(apiURL('returns'), {
                params: filters,
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Obtener detalle completo de una devolución con items y seriales
     * @param {Number} returnId - ID de la devolución
     * @returns {Promise}
     */
    async getReturnDetails(returnId) {
        return new Promise((resolve, reject) => {
            api.get(apiURL(`returns/${returnId}`), {
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Obtener items devolvibles de una venta
     * @param {Number} saleId - ID de la venta
     * @returns {Promise}
     */
    async getReturnableItems(saleId) {
        return new Promise((resolve, reject) => {
            api.get(apiURL(`sales/${saleId}/returnable`), {
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Crear una nueva devolución
     * @param {Object} returnData - Datos de la devolución
     * @returns {Promise}
     */
    async createReturn(returnData) {
        return new Promise((resolve, reject) => {
            api.post(apiURL('returns'), {
                data: returnData,
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Cancelar una devolución
     * @param {Number} returnId - ID de la devolución
     * @returns {Promise}
     */
    async cancelReturn(returnId) {
        return new Promise((resolve, reject) => {
            api.put(apiURL(`returns/${returnId}/cancel`), {
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    }
};

export default returnsService;