import type { CreateOldItemNeedRequest, OldItemDonationItem, OldItemDonationStatus, OldItemAssigneeOption, DownloadUrlResponse, OldItemNeedItem, OldItemNeedStatus, OldItemStats, OldItemDropOffPoint, CreateOldItemInventoryRequest, ImportOldItemInventoryRequest, OldItemInventoryExportRow, OldItemInventoryItem, OldItemInventoryStatus, } from '@lehuo/contracts'; import { apiRequest } from './api-client'; export interface Page { items: T[]; page: number; pageSize: number; total: number; } export const getOldItemStats = () => apiRequest('/api/v1/old-items/stats'); export const listOldItemDonations = (status = '') => apiRequest>( `/api/v1/admin/old-items/donations?page=1&pageSize=100${status ? `&status=${status}` : ''}`, ); export const getOldItemDonation = (id: string) => apiRequest<{ donation: OldItemDonationItem }>(`/api/v1/admin/old-items/donations/${id}`); export const transitionOldItemDonation = ( id: string, expectedRevision: number, targetStatus: OldItemDonationStatus, note?: string, assistedPeople?: number, assignedUserPublicId?: string, ) => apiRequest<{ donation: OldItemDonationItem }>( `/api/v1/admin/old-items/donations/${id}/transition`, { method: 'POST', body: JSON.stringify({ clientRequestId: crypto.randomUUID(), expectedRevision, targetStatus, note, assistedPeople, assignedUserPublicId, }), }, ); export const listOldItemNeeds = () => apiRequest>('/api/v1/admin/old-items/needs?page=1&pageSize=100'); export const createOldItemNeed = (input: Omit) => apiRequest<{ need: OldItemNeedItem }>('/api/v1/admin/old-items/needs', { method: 'POST', body: JSON.stringify({ ...input, clientRequestId: crypto.randomUUID() }), }); export const listOldItemAssignees = () => apiRequest<{ items: OldItemAssigneeOption[] }>('/api/v1/admin/old-items/assignees'); export const getOldItemImageUrl = (id: string) => apiRequest(`/api/v1/admin/old-items/media/${id}/download`); export const listOldItemDropOffPoints = () => apiRequest<{ items: OldItemDropOffPoint[] }>('/api/v1/old-items/drop-off-points'); export const createOldItemDropOffPoint = (input: { name: string; regionText: string; addressText: string; openingHours: string; sortOrder: number; }) => apiRequest<{ point: OldItemDropOffPoint }>('/api/v1/admin/old-items/drop-off-points', { method: 'POST', body: JSON.stringify(input), }); export const transitionOldItemNeed = ( id: string, revision: number, targetStatus: OldItemNeedStatus, ) => apiRequest<{ need: OldItemNeedItem }>(`/api/v1/admin/old-items/needs/${id}/transition`, { method: 'POST', body: JSON.stringify({ clientRequestId: crypto.randomUUID(), expectedRevision: revision, targetStatus, }), }); export const listOldItemInventory = (status = '') => apiRequest>( `/api/v1/admin/old-items/inventory?page=1&pageSize=100${status ? `&status=${status}` : ''}`, ); export const getOldItemInventory = (id: string) => apiRequest<{ item: OldItemInventoryItem }>(`/api/v1/admin/old-items/inventory/${id}`); export const createOldItemInventory = ( input: Omit, ) => apiRequest<{ item: OldItemInventoryItem }>('/api/v1/admin/old-items/inventory', { method: 'POST', body: JSON.stringify({ ...input, clientRequestId: crypto.randomUUID() }), }); export const importOldItemInventory = ( input: Omit, ) => apiRequest<{ importPublicId: string; items: OldItemInventoryItem[] }>( '/api/v1/admin/old-items/inventory/import', { method: 'POST', body: JSON.stringify({ ...input, clientRequestId: crypto.randomUUID() }), }, ); export const transitionOldItemInventory = ( id: string, input: { expectedRevision: number; targetStatus: OldItemInventoryStatus; eventAt?: string; locationText?: string; note?: string; targetNeedPublicId?: string; beneficiaryPublicId?: string; destinationRegion?: string; assistedPeople?: number; }, ) => apiRequest<{ item: OldItemInventoryItem }>(`/api/v1/admin/old-items/inventory/${id}/transition`, { method: 'POST', body: JSON.stringify({ ...input, clientRequestId: crypto.randomUUID() }), }); export const exportOldItemInventory = () => apiRequest<{ rows: OldItemInventoryExportRow[]; exportedAt: string }>( '/api/v1/admin/old-items/inventory-export/file?page=1&pageSize=100', );