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

/**
 * Servicio para gestionar números de serie de inventario
 */
const serialService = {
    /**
     * Obtener lista de seriales de un producto
     * @param {Number} inventoryId - ID del inventario
     * @param {Object} filters - Filtros opcionales (status, q, page)
     * @returns {Promise}
     */
    async getSerials(inventoryId, filters = {}) {
        return new Promise((resolve, reject) => {
            api.get(apiURL(`inventario/${inventoryId}/serials`), {
                params: filters,
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Obtener solo seriales disponibles de un producto
     * @param {Number} inventoryId - ID del inventario
     * @returns {Promise}
     */
    async getAvailableSerials(inventoryId) {
        return this.getSerials(inventoryId, { status: 'disponible' });
    },

    /**
     * Obtener un serial específico
     * @param {Number} inventoryId - ID del inventario
     * @param {Number} serialId - ID del serial
     * @returns {Promise}
     */
    async getSerial(inventoryId, serialId) {
        return new Promise((resolve, reject) => {
            api.get(apiURL(`inventario/${inventoryId}/serials/${serialId}`), {
                onSuccess: (response) => {
                    resolve(response.serial || response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Crear un nuevo serial
     * @param {Number} inventoryId - ID del inventario
     * @param {Object} data - Datos del serial (serial_number, notes)
     * @returns {Promise}
     */
    async createSerial(inventoryId, data) {
        return new Promise((resolve, reject) => {
            api.post(apiURL(`inventario/${inventoryId}/serials`), {
                data: data,
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Importar múltiples seriales
     * @param {Number} inventoryId - ID del inventario
     * @param {Array} serialNumbers - Array de números de serie
     * @returns {Promise}
     */
    async bulkImport(inventoryId, serialNumbers) {
        return new Promise((resolve, reject) => {
            api.post(apiURL(`inventario/${inventoryId}/serials/bulk`), {
                data: { serial_numbers: serialNumbers },
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Actualizar un serial
     * @param {Number} inventoryId - ID del inventario
     * @param {Number} serialId - ID del serial
     * @param {Object} data - Datos a actualizar (serial_number, status, notes)
     * @returns {Promise}
     */
    async updateSerial(inventoryId, serialId, data) {
        return new Promise((resolve, reject) => {
            api.put(apiURL(`inventario/${inventoryId}/serials/${serialId}`), {
                data: data,
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    },

    /**
     * Eliminar un serial
     * @param {Number} inventoryId - ID del inventario
     * @param {Number} serialId - ID del serial
     * @returns {Promise}
     */
    async deleteSerial(inventoryId, serialId) {
        return new Promise((resolve, reject) => {
            api.delete(apiURL(`inventario/${inventoryId}/serials/${serialId}`), {
                onSuccess: (response) => {
                    resolve(response);
                },
                onError: (error) => {
                    reject(error);
                }
            });
        });
    }
};

export default serialService;
