import { apiDelete, apiGet, apiGetBlob, apiPost } from '@/lib/http' import type { AdminAgisoMessagingDefaults, AdminAgisoObservedShopItem, AdminAgisoShopConfigItem, AdminAuditLogItem, AdminFulfillmentLookupResult, AdminFulfillmentBindingConfigItem, AdminKhhaoLoginTestResult, AdminKhhaoOrderQueryResult, AdminKhhaoSourceConfig, AdminKhhaoSyncState, AdminKhhaoOrderSyncResult, AdminInventoryItemListItem, AdminInventorySkuSuggestion, AdminMessageDeliveryListItem, AdminObservedProductItem, AdminTaskActionResponse, AdminDashboardSummary, AdminLoginResponse, AdminManualRedeemDetail, AdminOrderDetail, AdminOrderListItem, AdminPagination, AdminSessionSummary, AdminTaskDetail, AdminTaskListItem, AdminUserListItem, AdminWebhookEventDetail, AdminWebhookEventListItem, AdminWebhookReplayResponse, } from '@/types/admin' export function loginAdmin(payload: { username: string; password: string }) { return apiPost('/api/v1/admin/auth/login', payload) } export function fetchAdminSession() { return apiGet('/api/v1/admin/auth/session') } export function logoutAdmin() { return apiPost<{ success: boolean }>('/api/v1/admin/auth/logout', {}) } export function fetchAdminDashboardSummary() { return apiGet('/api/v1/admin/dashboard/summary') } export function fetchAdminUsers(params?: Record) { return apiGet<{ items: AdminUserListItem[]; pagination: AdminPagination }>('/api/v1/admin/users', params) } export function createAdminUser(payload: { username: string; password: string; role: string; status?: string }) { return apiPost<{ user: AdminUserListItem }>('/api/v1/admin/users', payload) } export function updateAdminUserRole(userId: number | string, payload: { role: string }) { return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/role`, payload) } export function updateAdminUserStatus(userId: number | string, payload: { status: string }) { return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/status`, payload) } export function updateAdminUserInventoryGroups(userId: number | string, payload: { inventoryGroupCodes: string[] }) { return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/inventory-groups`, payload) } export function resetAdminUserPassword(userId: number | string, payload: { password: string }) { return apiPost<{ user: AdminUserListItem }>(`/api/v1/admin/users/${userId}/reset-password`, payload) } export function fetchAdminAuditLogs(params?: Record) { return apiGet<{ items: AdminAuditLogItem[]; pagination: AdminPagination }>('/api/v1/admin/audit-logs', params) } export function fetchAdminAgisoShopConfigs() { return apiGet<{ filePath: string defaults: AdminAgisoMessagingDefaults shops: AdminAgisoShopConfigItem[] observedShops: AdminAgisoObservedShopItem[] }>('/api/v1/admin/platform-config/agiso-shops') } export function saveAdminAgisoShopConfigs(payload: { defaults: AdminAgisoMessagingDefaults shops: Array> }) { return apiPost<{ filePath: string defaults: AdminAgisoMessagingDefaults shops: AdminAgisoShopConfigItem[] }>('/api/v1/admin/platform-config/agiso-shops', payload) } export function fetchAdminKhhaoSourceConfig() { return apiGet<{ filePath: string source: AdminKhhaoSourceConfig stateFilePath: string syncState: AdminKhhaoSyncState }>('/api/v1/admin/platform-config/khhao-source') } export function saveAdminKhhaoSourceConfig(payload: AdminKhhaoSourceConfig) { return apiPost<{ filePath: string source: AdminKhhaoSourceConfig stateFilePath: string syncState: AdminKhhaoSyncState }>('/api/v1/admin/platform-config/khhao-source', payload as unknown as Record) } export function testAdminKhhaoLogin(payload: { baseUrl?: string username: string password: string maxCaptchaAttempts?: number includeImageBase64?: boolean }) { return apiPost('/api/v1/admin/platform-config/khhao/test-login', payload) } export function queryAdminKhhaoOrders(payload: { baseUrl?: string username: string password: string page?: number limit?: number maxCaptchaAttempts?: number }) { return apiPost('/api/v1/admin/platform-config/khhao/query-orders', payload) } export function syncAdminKhhaoOrders(payload: { baseUrl?: string username: string password: string page?: number limit?: number maxCaptchaAttempts?: number }) { return apiPost('/api/v1/admin/platform-config/khhao/sync-orders', payload) } export function fetchAdminFulfillmentBindingConfigs() { return apiGet<{ filePath: string bindings: AdminFulfillmentBindingConfigItem[] observedProducts: AdminObservedProductItem[] }>('/api/v1/admin/platform-config/fulfillment-bindings') } export function lookupAdminFulfillmentBindingOrder(payload: { provider?: string platform?: string shopId: string platformOrderId: string }) { return apiPost('/api/v1/admin/platform-config/fulfillment-bindings/lookup-order', payload) } export function saveAdminFulfillmentBindingConfigs(payload: { bindings: Array> }) { return apiPost<{ filePath: string bindings: AdminFulfillmentBindingConfigItem[] }>('/api/v1/admin/platform-config/fulfillment-bindings', payload) } export function fetchAdminOrders(params?: Record) { return apiGet<{ items: AdminOrderListItem[]; pagination: AdminPagination }>('/api/v1/admin/orders', params) } export function fetchAdminOrderDetail(orderId: number | string) { return apiGet(`/api/v1/admin/orders/${orderId}`) } export function fetchAdminTasks(params?: Record) { return apiGet<{ items: AdminTaskListItem[]; pagination: AdminPagination }>('/api/v1/admin/tasks', params) } export function fetchAdminTaskDetail(taskId: number | string) { return apiGet(`/api/v1/admin/tasks/${taskId}`) } export function fetchAdminTaskScreenshot(taskId: number | string) { return apiGetBlob(`/api/v1/admin/tasks/${taskId}/screenshot`) } export function retryAdminTask(taskId: number | string) { return apiPost(`/api/v1/admin/tasks/${taskId}/retry`, {}) } export function releaseAdminTaskInventory(taskId: number | string) { return apiPost(`/api/v1/admin/tasks/${taskId}/release-inventory`, {}) } export function releaseAdminTaskInventoryBinding(taskId: number | string, bindingId: number | string) { return apiPost(`/api/v1/admin/tasks/${taskId}/inventory-bindings/${bindingId}/release`, {}) } export function regenerateAdminTaskClaimLink(taskId: number | string) { return apiPost( `/api/v1/admin/tasks/${taskId}/regenerate-claim-link`, {}, ) } export function confirmAdminTaskAssistedRole(taskId: number | string) { return apiPost(`/api/v1/admin/tasks/${taskId}/support-confirm-role`, {}) } export function redeemAdminTaskAssisted(taskId: number | string) { return apiPost(`/api/v1/admin/tasks/${taskId}/support-redeem`, {}) } export function closeAdminTask(taskId: number | string) { return apiPost(`/api/v1/admin/tasks/${taskId}/close`, {}) } export function markAdminTaskManualReview(taskId: number | string) { return apiPost(`/api/v1/admin/tasks/${taskId}/mark-manual-review`, {}) } export function completeAdminTaskManualDispatch( taskId: number | string, payload: { outcome: 'delivered' | 'failed' resultMessage?: string deliveryReference?: string deliveredCredential?: string }, ) { return apiPost(`/api/v1/admin/tasks/${taskId}/complete-manual-dispatch`, payload) } export function fetchAdminInventoryItems(params?: Record) { return apiGet<{ items: AdminInventoryItemListItem[]; pagination: AdminPagination }>('/api/v1/admin/inventory', params) } export function fetchAdminInventorySkuSuggestions(params?: Record) { return apiGet<{ items: AdminInventorySkuSuggestion[] }>('/api/v1/admin/inventory/sku-suggestions', params) } export function fetchAdminManualRedeemSkuSuggestions(params?: Record) { return apiGet<{ items: AdminInventorySkuSuggestion[] }>('/api/v1/admin/manual-redeem/sku-suggestions', params) } export function createAdminManualRedeemTask(payload: { proofValue: string skuCode: string skuName?: string remark?: string }) { return apiPost('/api/v1/admin/manual-redeem', payload) } export function fetchAdminManualRedeemDetail(taskId: number | string) { return apiGet(`/api/v1/admin/manual-redeem/${taskId}`) } export function createAdminManualRedeemSession( taskId: number | string, payload: { loginType: string; forceRecreate?: boolean }, ) { return apiPost(`/api/v1/admin/manual-redeem/${taskId}/session`, payload) } export function fetchAdminManualRedeemSessionSummary(taskId: number | string) { return apiGet(`/api/v1/admin/manual-redeem/${taskId}/session/summary`) } export function refreshAdminManualRedeemSession(taskId: number | string) { return apiPost(`/api/v1/admin/manual-redeem/${taskId}/session/refresh`, {}) } export function removeAdminManualRedeemSession(taskId: number | string) { return apiDelete(`/api/v1/admin/manual-redeem/${taskId}/session`) } export function confirmAdminManualRedeemRole(taskId: number | string) { return apiPost(`/api/v1/admin/manual-redeem/${taskId}/confirm-role`, {}) } export function redeemAdminManualRedeem(taskId: number | string) { return apiPost(`/api/v1/admin/manual-redeem/${taskId}/redeem`, {}) } export function closeAdminManualRedeemTask(taskId: number | string) { return apiPost(`/api/v1/admin/manual-redeem/${taskId}/close`, {}) } export function fetchAdminMessageDeliveries(params?: Record) { return apiGet<{ items: AdminMessageDeliveryListItem[]; pagination: AdminPagination }>( '/api/v1/admin/message-deliveries', params, ) } export function importAdminInventoryItems(payload: Record) { return apiPost<{ total: number; created: number; duplicated: number }>('/api/v1/admin/inventory/import', payload) } export function createAdminInventoryItem(payload: Record) { return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>('/api/v1/admin/inventory', payload) } export function releaseAdminInventoryItem(inventoryItemId: number | string) { return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>(`/api/v1/admin/inventory/${inventoryItemId}/release`, {}) } export function invalidateAdminInventoryItem(inventoryItemId: number | string, payload?: Record) { return apiPost<{ inventoryItem: AdminInventoryItemListItem | null }>(`/api/v1/admin/inventory/${inventoryItemId}/invalidate`, payload || {}) } export function fetchAdminWebhookEvents(params?: Record) { return apiGet<{ items: AdminWebhookEventListItem[]; pagination: AdminPagination }>( '/api/v1/admin/webhook-events', params, ) } export function fetchAdminWebhookEventDetail(eventId: number | string) { return apiGet(`/api/v1/admin/webhook-events/${eventId}`) } export function replayAdminWebhookEvent(eventId: number | string) { return apiPost(`/api/v1/admin/webhook-events/${eventId}/replay`, {}) }