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

export interface TransportType {
    transport_code: string;
    description: string;
}

export interface TransportTypeListResponse {
    items: TransportType[];
    total: number;
    page: number;
    page_size: number;
}

export interface CreateTransportTypeData {
    transport_code: string;
    description: string;
}

export interface UpdateTransportTypeData {
    transport_code?: string;
    description?: string;
}

/**
 * API para Transport Types
 */
export const transportTypesApi = {
    /**
     * Lista todos los tipos de transporte 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/transport-types/?company_id=${companyId}&page=${page}&page_size=${pageSize}`;
        if (search) {
            url += `&search=${encodeURIComponent(search)}`;
        }
        return api.get<TransportTypeListResponse>(url);
    },

    /**
     * Obtiene un tipo de transporte por transport_code
     */
    get: (transportCode: string) =>
        api.get<TransportType>(`/v1/public/reference_data/transport-types/${transportCode}/`),

    /**
     * Crea un nuevo tipo de transporte
     */
    create: (data: CreateTransportTypeData) =>
        api.post<TransportType>('/v1/public/reference_data/transport-types/', data),

    /**
     * Actualiza un tipo de transporte existente
     */
    update: (transportCode: string, data: UpdateTransportTypeData) =>
        api.put<TransportType>(`/v1/public/reference_data/transport-types/${transportCode}/`, data),

    /**
     * Elimina un tipo de transporte
     */
    delete: (transportCode: string) =>
        api.delete(`/v1/public/reference_data/transport-types/${transportCode}/`)
};