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

/**
 * Servicio para gestionar ventas
 */
const salesService = {
    /**
     * Crear una nueva venta
     * @param {Object} saleData - Datos de la venta
     * @returns {Promise}
     */
    async createSale(saleData) {
        return new Promise((resolve, reject) => {
            api.post(apiURL('sales'), {
                data: saleData,
                onSuccess: (response) => {
                    // El backend puede devolver: sale, model, o el objeto directo
                    // También incluye change, cash_received para pagos en efectivo
                    resolve(response.sale || response.model || response);
                },
                onFail: (data) => {
                    reject(data);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Obtener lista de ventas con filtros
     * @param {Object} filters - Filtros de búsqueda
     * @returns {Promise}
     */
    async getSales(filters = {}) {
        return new Promise((resolve, reject) => {
            api.get(apiURL('sales'), {
                params: filters,
                onSuccess: (response) => {
                    // Soportar ambos formatos: 'sales' o 'models'
                    resolve(response.sales || response.models);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

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

    /**
     * Cancelar una venta (restaura stock)
     * @param {Number} saleId - ID de la venta
     * @returns {Promise}
     */
    async cancelSale(saleId) {
        return new Promise((resolve, reject) => {
            api.put(apiURL(`sales/${saleId}/cancel`), {
                onSuccess: (response) => {
                    resolve(response.model);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    }
};

export default salesService;