/**
 * API Client para Customs Warehouses
 * Gestiona las operaciones CRUD para los recintos fiscalizados
 */
import { api } from '$lib/api';

export interface CustomsWarehouse {
	key: string;
	customs: string;
	fiscalized_warehouse: string;
}

export interface CustomsWarehouseListResponse {
	items: CustomsWarehouse[];
	total: number;
	page: number;
	page_size: number;
}

export interface CreateCustomsWarehouseData {
	key: string;
	customs: string;
	fiscalized_warehouse: string;
}

export interface UpdateCustomsWarehouseData {
	key?: string;
	customs?: string;
	fiscalized_warehouse?: string;
}

/**
 * API para Customs Warehouses
 */
export const customsWarehousesApi = {
    /**
     * Lista todos los recintos fiscalizados con paginación y búsqueda
     * @param page - Número de página (por defecto 1)
     * @param pageSize - Tamaño de página (por defecto 50)
     * @param search - Término de búsqueda (opcional)
     */
    list: (page = 1, pageSize = 50, search?: string) => {
        let url = `/v1/public/reference_data/customs-warehouses/?page=${page}&page_size=${pageSize}`;
        if (search) {
            url += `&search=${encodeURIComponent(search)}`;
        }
        return api.get<CustomsWarehouseListResponse>(url);
    },

    /**
     * Obtiene un recinto fiscalizado por clave compuesta (key + customs)
     * @param key - Clave del recinto
     * @param customs - Aduana asociada
     */
    get: (key: string, customs: string) => 
        // CORREGIDO: Añadido '/' al final de la ruta compuesta
        api.get<CustomsWarehouse>(`/v1/public/reference_data/customs-warehouses/${key}/${customs}/`),

    /**
     * Crea un nuevo recinto fiscalizado
     * @param data - Datos del recinto fiscalizado a crear
     */
    create: (data: CreateCustomsWarehouseData) =>
        // CORREGIDO: Añadido '/' al final
        api.post<CustomsWarehouse>('/v1/public/reference_data/customs-warehouses/', data),

    /**
     * Actualiza un recinto fiscalizado existente
     * @param key - Clave del recinto a actualizar
     * @param customs - Aduana asociada
     * @param data - Datos a actualizar
     */
    update: (key: string, customs: string, data: UpdateCustomsWarehouseData) =>
        // CORREGIDO: Añadido '/' al final de la ruta compuesta
        api.put<CustomsWarehouse>(`/v1/public/reference_data/customs-warehouses/${key}/${customs}/`, data),

    /**
     * Elimina un recinto fiscalizado
     * @param key - Clave del recinto a eliminar
     * @param customs - Aduana asociada
     */
    delete: (key: string, customs: string) => 
        // CORREGIDO: Añadido '/' al final de la ruta compuesta
        api.delete(`/v1/public/reference_data/customs-warehouses/${key}/${customs}/`)
};