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

export interface InvoiceType {
	key: string;
	description: string;
	note?: string;
	type?: string;
	operation?: string;
}

export interface InvoiceTypeListResponse {
	items: InvoiceType[];
	total: number;
	page: number;
	page_size: number;
}

export interface CreateInvoiceTypeData {
	key: string;
	description: string;
	note?: string;
	type?: string;
}

export interface UpdateInvoiceTypeData {
	key?: string;
	description?: string;
	note?: string;
	type?: string;
}

/**
 * API para Invoice Types
 */
export const invoiceTypesApi = {
    /**
     * Lista todos los tipos de factura 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 operation - Filtrar por tipo de operación (imp, exp)
     * @param search - Término de búsqueda (opcional)
     */
    list: (page = 1, pageSize = 50, operation?: string, search?: string) => {
        const params = new URLSearchParams({
            page: page.toString(),
            page_size: pageSize.toString()
        });
        if (operation) {
            params.append('operation', operation);
        }
        if (search) {
            params.append('search', search);
        }
        return api.get<InvoiceTypeListResponse>(
            `/v1/public/reference_data/invoice-types/?${params.toString()}`
        );
    },

    /**
     * Obtiene un tipo de factura por key
     * @param key - Clave del tipo de factura
     */
    get: (key: string) => 
        // CORREGIDO: Añadido '/' final
        api.get<InvoiceType>(`/v1/public/reference_data/invoice-types/${key}/`),

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

    /**
     * Actualiza un tipo de factura existente
     * @param key - Clave del tipo de factura a actualizar
     * @param data - Datos a actualizar
     */
    update: (key: string, data: UpdateInvoiceTypeData) =>
        // CORREGIDO: Añadido '/' después de la key
        api.put<InvoiceType>(`/v1/public/reference_data/invoice-types/${key}/`, data),

    /**
     * Elimina un tipo de factura
     * @param key - Clave del tipo de factura a eliminar
     */
    delete: (key: string) => 
        // CORREGIDO: Añadido '/' después de la key
        api.delete(`/v1/public/reference_data/invoice-types/${key}/`)
};