import { apiDelete, apiGet, apiPost } from '@/lib/http' import type { CollectLookupResponse, UploadedFile, WorkOrder, WorkOrderEvent, WorkOrderShare, WorkerFinanceRequest, WorkerHallOrdersResponse, WorkerLeaderboardResponse, WorkerListResponse, WorkerLoginResponse, WorkerOrderOverviewResponse, WorkerProfileResponse, WorkerSessionDevice, WorkerUser, WorkerWalletLedger, } from '@/types/worker-platform' import { getWorkerDeviceId } from '@/utils/worker-auth' export function sendWorkerSmsCode(payload: { phone: string }) { return apiPost<{ sent: boolean; expiresInSeconds: number; provider: string }>( '/api/v1/worker/auth/sms-code', payload, ) } export function registerWorker(payload: { phone: string code: string password: string displayName: string inviteCode?: string }) { return apiPost<{ worker: WorkerUser; reviewRequired: boolean }>( '/api/v1/worker/auth/register', payload, ) } export function loginWorker(payload: { username: string; password: string }) { const userAgent = navigator.userAgent const isMobile = /Android|iPhone|iPad|iPod|Mobile/i.test(userAgent) return apiPost('/api/v1/worker/auth/login', { ...payload, deviceId: getWorkerDeviceId(), deviceType: isMobile ? 'mobile' : 'pc', deviceName: isMobile ? '手机浏览器' : 'PC 浏览器', }) } export function fetchWorkerSessions() { return apiGet<{ maxDevices: number; items: WorkerSessionDevice[] }>('/api/v1/worker/auth/devices') } export function deleteWorkerSession(sessionId: string) { return apiDelete<{ deleted: boolean }>(`/api/v1/worker/auth/devices/${sessionId}`) } export function manageWorkerSessions(payload: { username: string; password: string }) { return apiPost<{ maxDevices: number; items: WorkerSessionDevice[] }>( '/api/v1/worker/auth/devices/manage/list', payload, ) } export function deleteWorkerSessionWithCredentials(payload: { username: string password: string sessionId: string }) { return apiPost<{ deleted: boolean }>('/api/v1/worker/auth/devices/manage/delete', payload) } export function fetchWorkerSession() { return apiGet<{ authenticated: boolean expiresAt: string worker: WorkerUser }>('/api/v1/worker/auth/session') } export function logoutWorker() { return apiPost<{ success: boolean }>('/api/v1/worker/auth/logout') } export function fetchWorkerProfile() { return apiGet('/api/v1/worker/profile') } export function fetchWorkerWalletLedgers(params?: Record) { return apiGet>( '/api/v1/worker/profile/wallet-ledgers', params, ) } export function fetchWorkerFinanceRequests(params?: Record) { return apiGet>( '/api/v1/worker/profile/finance-requests', params, ) } export function createWorkerRechargeRequest(payload: { amount?: number note?: string paidAt?: string proofFiles?: UploadedFile[] }) { return apiPost<{ request: WorkerFinanceRequest }>( '/api/v1/worker/profile/recharge-requests', payload, ) } export function createWorkerWithdrawRequest(payload: { amount?: number accountChannel: string note?: string }) { return apiPost<{ request: WorkerFinanceRequest }>( '/api/v1/worker/profile/withdraw-requests', payload, ) } export function createWorkerWithdrawalAccount(payload: { accountChannel: string accountName: string accountNo?: string wechatQrCodeImages?: UploadedFile[] }) { return apiPost('/api/v1/worker/profile/withdrawal-account', payload) } export function changeWorkerPassword(payload: { currentPassword: string; newPassword: string }) { return apiPost<{ worker: WorkerUser; reloginRequired: boolean }>( '/api/v1/worker/profile/change-password', payload, ) } export function fetchWorkerHallOrders(params?: Record) { return apiGet('/api/v1/worker/hall/orders', params) } export function fetchWorkerHallLeaderboard() { return apiGet('/api/v1/worker/hall/leaderboard') } export function grabWorkerOrder(workOrderId: number) { return apiPost<{ order: WorkOrder }>(`/api/v1/worker/hall/orders/${workOrderId}/grab`) } export function joinWorkerSharingOrder(workOrderId: number, payload: { quantity: number }) { return apiPost<{ share: WorkOrderShare }>( `/api/v1/worker/hall/orders/${workOrderId}/join-sharing`, payload, ) } export function fetchWorkerMyOrders(params?: Record) { return apiGet>('/api/v1/worker/orders', params) } export function fetchWorkerMyOrderOverview() { return apiGet('/api/v1/worker/orders/overview') } export function fetchWorkerMyOrderEvents(workOrderId: number) { return apiGet<{ items: WorkOrderEvent[] }>(`/api/v1/worker/orders/${workOrderId}/events`) } export function markWorkerOrderRead(workOrderId: number) { return apiPost<{ viewedAt: string; isUnread: false }>(`/api/v1/worker/orders/${workOrderId}/read`) } export function saveWorkerOrderNote(workOrderId: number, note: string) { return apiPost<{ order: WorkOrder }>(`/api/v1/worker/orders/${workOrderId}/note`, { note }) } export function submitWorkerAcceptance( workOrderId: number, payload: { note?: string; imageUrls?: string[]; files?: UploadedFile[] }, ) { return apiPost<{ order: WorkOrder }>( `/api/v1/worker/orders/${workOrderId}/submit-acceptance`, payload, ) } export function remindWorkerAcceptance(workOrderId: number) { return apiPost<{ reminderCount: number; nextRemindAt: string }>( `/api/v1/worker/orders/${workOrderId}/remind-acceptance`, ) } export function saveWorkerAcceptanceDraft( workOrderId: number, payload: { note?: string; imageUrls?: string[]; files?: UploadedFile[] }, ) { return apiPost<{ order: WorkOrder }>( `/api/v1/worker/orders/${workOrderId}/acceptance-draft`, payload, ) } export function supplementWorkerAcceptedOrderEvidence( workOrderId: number, payload: { files: UploadedFile[] }, ) { return apiPost<{ order: WorkOrder }>( `/api/v1/worker/orders/${workOrderId}/acceptance-evidence`, payload, ) } export function lookupCollectOrder(orderNo: string) { return apiPost('/api/v1/collect/lookup', { orderNo }) } export function submitCollectOrder(payload: { orderNo: string workOrderId?: number fields: Record screenshots?: UploadedFile[] }) { return apiPost<{ complete: boolean; order: Record }>( '/api/v1/collect/submit', payload, ) }