/**
 * API Client para Customs Sections
 * Gestiona las operaciones CRUD para las secciones aduaneras
 */
import { api } from '$lib/api';

export interface CustomsSection {
    customs_code: string;
    section_name: string;
}

export interface CustomsSectionListResponse {
    items: CustomsSection[];
    total: number;
    page: number;
    page_size: number;
}

export interface CreateCustomsSectionData {
    customs_code: string;
    section_name: string;
}

export interface UpdateCustomsSectionData {
    customs_code?: string;
    section_name?: string;
}

/**
 * API para Customs Sections
 */
export const customsSectionsApi = {
    /**
     * Lista todas las secciones aduaneras con paginación y búsqueda
     * @param companyId - ID de la empresa
     * @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: (companyId: number, page = 1, pageSize = 50, search?: string) => {
        let url = `/v1/public/reference_data/customs-sections/?page=${page}&page_size=${pageSize}&company_id=${companyId}`;
        if (search) {
            url += `&search=${encodeURIComponent(search)}`;
        }
        return api.get<CustomsSectionListResponse>(url);
    },

    /**
     * Obtiene una sección aduanera por key
     * @param companyId - ID de la empresa
     * @param sectionCode - Código de la sección
     */
    get: (companyId: number, sectionCode: string) => 
        // CORREGIDO: Añadido '/' final
        api.get<CustomsSection>(`/v1/public/reference_data/customs-sections/${sectionCode}/?company_id=${companyId}`),

    /**
     * Crea una nueva sección aduanera
     * @param data - Datos de la sección aduanera a crear
     */
    create: (data: CreateCustomsSectionData) =>
        // CORREGIDO: Añadido '/' final
        api.post<CustomsSection>('/v1/public/reference_data/customs-sections/', data),

    /**
     * Actualiza una sección aduanera existente
     * @param customs_code - Código de la sección aduanera a actualizar
     * @param data - Datos a actualizar
     */
    update: (customs_code: string, data: UpdateCustomsSectionData) =>
        // CORREGIDO: Añadido '/' después del código
        api.put<CustomsSection>(`/v1/public/reference_data/customs-sections/${customs_code}/`, data),

    /**
     * Elimina una sección aduanera
     * @param customs_code - Código de la sección aduanera a eliminar
     */
    delete: (customs_code: string) =>
        // CORREGIDO: Añadido '/' después del código
        api.delete(`/v1/public/reference_data/customs-sections/${customs_code}/`)
};