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

export interface TransportMode {
    key: string;
    name: string;
}

export interface TransportModeListResponse {
    items: TransportMode[];
    total: number;
    page: number;
    page_size: number;
}

export interface CreateTransportModeData {
    key: string;
    name: string;
}

export interface UpdateTransportModeData {
    key?: string;
    name?: string;
}

/**
 * API para Transport Modes
 */
export const transportModesApi = {
    /**
     * Lista todos los modos de transporte con paginación
     * @param page - Número de página (por defecto 1)
     * @param pageSize - Tamaño de página (por defecto 50)
     */
    list: (page = 1, pageSize = 50) =>
        api.get<TransportModeListResponse>(
            `/v1/public/reference_data/transport-modes/?page=${page}&page_size=${pageSize}`
        ),

    /**
     * Obtiene un modo de transporte por key
     * @param key - Clave del modo de transporte
     */
    get: (key: string) =>
        api.get<TransportMode>(`/v1/public/reference_data/transport-modes/${key}/`),

    /**
     * Crea un nuevo modo de transporte
     * @param data - Datos del modo de transporte a crear
     */
    create: (data: CreateTransportModeData) =>
        api.post<TransportMode>('/v1/public/reference_data/transport-modes/', data),

    /**
     * Actualiza un modo de transporte existente
     * @param key - Clave del modo de transporte a actualizar
     * @param data - Datos a actualizar
     */
    update: (key: string, data: UpdateTransportModeData) =>
        api.put<TransportMode>(`/v1/public/reference_data/transport-modes/${key}/`, data),

    /**
     * Elimina un modo de transporte
     * @param key - Clave del modo de transporte a eliminar
     */
    delete: (key: string) =>
        api.delete(`/v1/public/reference_data/transport-modes/${key}/`)
};