/**
 * API Client para Currency Types
 * Gestiona las operaciones CRUD para los tipos de moneda
 */
import { api } from '$lib/api';

export interface CurrencyType {
	code: string;
	currency_name: string;
	country_description: string;
}

export interface CurrencyTypeListResponse {
	items: CurrencyType[];
	total: number;
	page: number;
	page_size: number;
}

export interface CreateCurrencyTypeData {
	code: string;
	currency_name: string;
	country_description: string;
}

export interface UpdateCurrencyTypeData {
	code?: string;
	currency_name?: string;
	country_description?: string;
}

/**
 * API para Currency Types
 */
export const currencyTypesApi = {
    /**
     * Lista todos los tipos de moneda 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/currency-types/?page=${page}&page_size=${pageSize}`;
        if (search) {
            url += `&search=${encodeURIComponent(search)}`;
        }
        return api.get<CurrencyTypeListResponse>(url);
    },

    /**
     * Obtiene un tipo de moneda por código
     * @param code - Código del tipo de moneda
     */
    get: (code: string) => 
        // CORREGIDO: Añadido '/' al final
        api.get<CurrencyType>(`/v1/public/reference_data/currency-types/${code}/`),

    /**
     * Crea un nuevo tipo de moneda
     * @param data - Datos del tipo de moneda a crear
     */
    create: (data: CreateCurrencyTypeData) =>
        // CORREGIDO: Añadido '/' al final
        api.post<CurrencyType>('/v1/public/reference_data/currency-types/', data),

    /**
     * Actualiza un tipo de moneda existente
     * @param code - Código del tipo de moneda a actualizar
     * @param data - Datos a actualizar
     */
    update: (code: string, data: UpdateCurrencyTypeData) =>
        // CORREGIDO: Añadido '/' después del código
        api.put<CurrencyType>(`/v1/public/reference_data/currency-types/${code}/`, data),

    /**
     * Elimina un tipo de moneda
     * @param code - Código del tipo de moneda a eliminar
     */
    delete: (code: string) => 
        // CORREGIDO: Añadido '/' después del código
        api.delete(`/v1/public/reference_data/currency-types/${code}/`)
};