import request from './request' import type { DashboardStats, AlertChannelInput, AlertNotifyChannel, ApiClient, ApiCredential, CallbackCredential, CallbackSubscription, CreateManualOrderResult, CreateTestOrderResult, DeliveryBindResult, DeliveryOrderInfo, DeliveryLinkResult, DeliverySubmitResult, FulfillmentOrder, LoginResult, LowBalanceAlertConfig, Merchant, MerchantMember, MerchantProduct, PageResult, ProductCatalogItem, RechargeApplication, User, WalletAccount, WalletLedgerEntry, } from '../types' export const authApi = { login: async (username: string, password: string) => { const res = await request.post('/auth/login', { username, password }) return res.data.data as LoginResult }, profile: async () => { const res = await request.get('/auth/profile') return res.data.data as User }, } export const dashboardApi = { stats: () => request.get('/dashboard').then((r) => r.data.data as DashboardStats), } export const userApi = { list: (params?: Record) => request.get('/users', { params }).then((r) => r.data.data as PageResult), create: (data: { username: string; password: string; nickname?: string; role?: string }) => request.post('/users', data).then((r) => r.data.data as User), updateStatus: (id: number, status: number) => request.patch(`/users/${id}/status`, { status }).then((r) => r.data.data), } export const merchantApi = { current: () => request.get('/merchant').then((r) => r.data.data as { merchant: Merchant; role: MerchantMember['role'] }), products: (params?: Record) => request.get('/merchant/products', { params }).then((r) => r.data.data as PageResult), updateProductStatus: (id: number, status: MerchantProduct['status']) => request.patch(`/merchant/products/${id}/status`, { status }).then((r) => r.data.data), orders: (params?: Record) => request.get('/merchant/orders', { params }).then((r) => r.data.data as PageResult), createTestOrder: (data: { sku: string buyer_reference?: string note?: string order_status?: 'paid' | 'ship_failed' | 'cancelled' }) => request.post('/merchant/orders/test', data).then((r) => r.data.data as CreateTestOrderResult), createManualOrder: (data: { client_order_no: string sku: string quantity: number buyer_reference?: string game_account?: string note?: string }) => request.post('/merchant/orders/manual', data).then((r) => r.data.data as CreateManualOrderResult), getDeliveryLink: (orderNo: string) => request.get(`/merchant/orders/${encodeURIComponent(orderNo)}/delivery-link`).then((r) => r.data.data as DeliveryLinkResult), revokeDeliveryLink: (orderNo: string) => request.post(`/merchant/orders/${encodeURIComponent(orderNo)}/delivery-link/revoke`).then((r) => r.data.data), restoreDeliveryLink: (orderNo: string) => request.post(`/merchant/orders/${encodeURIComponent(orderNo)}/delivery-link/restore`).then((r) => r.data.data as DeliveryLinkResult), wallet: () => request.get('/merchant/wallet').then((r) => r.data.data as WalletAccount), ledger: (params?: Record) => request.get('/merchant/wallet/ledger', { params }).then((r) => r.data.data as PageResult), apiClients: () => request.get('/merchant/api-clients').then((r) => r.data.data as ApiClient[]), createApiClient: (data: { name: string scopes: string signature_version?: string expires_at?: string }) => request.post('/merchant/api-clients', data).then((r) => r.data.data as ApiCredential), updateApiClientStatus: (id: number, status: ApiClient['status']) => request.patch(`/merchant/api-clients/${id}/status`, { status }).then((r) => r.data.data), deleteApiClient: (id: number) => request.delete(`/merchant/api-clients/${id}`).then((r) => r.data.data), callbacks: () => request.get('/merchant/callbacks').then((r) => r.data.data as CallbackSubscription | null), saveCallback: (data: { url: string; events: string; status: CallbackSubscription['status']; rotate_secret?: boolean }) => request.post('/merchant/callbacks', data).then((r) => r.data.data as CallbackCredential), members: () => request.get('/merchant/members').then((r) => r.data.data as MerchantMember[]), addMember: (data: { user_id: number; role: MerchantMember['role']; is_default?: boolean }) => request.post('/merchant/members', data).then((r) => r.data.data as MerchantMember), rechargeApplications: (params?: Record) => request.get('/merchant/recharge/applications', { params }).then((r) => r.data.data as PageResult), createRechargeApplication: (data: { amount_cny: number; vouchers: string[]; note?: string }) => // amount_cny 单位:分(1元 = 100分),积分按 1元 = 100积分 折算 request.post('/merchant/recharge/applications', data).then((r) => r.data.data as RechargeApplication), alertConfig: () => request.get('/merchant/recharge/alert-config').then((r) => r.data.data as LowBalanceAlertConfig), saveAlertConfig: (data: { enabled: boolean; threshold_points: number; notify_interval_minutes: number; max_notifications: number }) => request.put('/merchant/recharge/alert-config', data).then((r) => r.data.data as LowBalanceAlertConfig), alertChannels: () => request.get('/merchant/alert-channels').then((r) => r.data.data as AlertNotifyChannel[]), createAlertChannel: (data: AlertChannelInput) => request.post('/merchant/alert-channels', data).then((r) => r.data.data as AlertNotifyChannel), updateAlertChannel: (id: number, data: AlertChannelInput) => request.put(`/merchant/alert-channels/${id}`, data).then((r) => r.data.data as AlertNotifyChannel), deleteAlertChannel: (id: number) => request.delete(`/merchant/alert-channels/${id}`).then((r) => r.data.data), testAlertChannel: (id: number) => request.post(`/merchant/alert-channels/${id}/test`).then((r) => r.data.data), } export const uploadApi = { file: (file: File) => { const form = new FormData() form.append('file', file) return request.post('/upload', form, { headers: { 'Content-Type': 'multipart/form-data' }, timeout: 60000, }).then((r) => r.data.data as { url: string }) }, } export const deliveryApi = { getOrder: (orderNo: string, auth?: { exp?: string; sign?: string }) => request.get(`/delivery/v1/orders/${encodeURIComponent(orderNo)}`, { params: auth }).then((r) => r.data.data as DeliveryOrderInfo), bind: (orderNo: string, gameAccount: string, auth?: { exp?: string; sign?: string }) => request.post( `/delivery/v1/orders/${encodeURIComponent(orderNo)}/bind`, { game_account: gameAccount, }, { params: auth }, ).then((r) => r.data.data as DeliveryBindResult), submit: (orderNo: string, gameAccount: string, bindUUID: string, auth?: { exp?: string; sign?: string }) => request.post( `/delivery/v1/orders/${encodeURIComponent(orderNo)}/submit`, { game_account: gameAccount, bind_uuid: bindUUID, }, { params: auth }, ).then((r) => r.data.data as DeliverySubmitResult), } export const platformApi = { merchants: (params?: Record) => request.get('/platform/merchants', { params }).then((r) => r.data.data as PageResult), createMerchant: (data: { code: string name: string contact_name?: string contact_info?: string owner_user_id?: number owner_username?: string owner_password?: string owner_nickname?: string features?: string fee_type?: 'rate' | 'fixed' fee_rate_bp?: number fee_fixed_amount?: number }) => request.post('/platform/merchants', data).then((r) => r.data.data as Merchant), updateMerchant: (id: number, data: Partial) => request.patch(`/platform/merchants/${id}`, data).then((r) => r.data.data), addMember: ( merchantId: number, data: { user_id: number; role: MerchantMember['role']; is_default?: boolean }, ) => request.post(`/platform/merchants/${merchantId}/members`, data).then((r) => r.data.data as MerchantMember), productCatalog: () => request.get('/platform/product-catalog').then((r) => r.data.data as ProductCatalogItem[]), merchantProducts: (merchantId: number) => request.get(`/platform/merchants/${merchantId}/products`).then((r) => r.data.data as ProductCatalogItem[]), updateMerchantProduct: (merchantId: number, productId: number, data: Partial) => request.patch(`/platform/merchants/${merchantId}/products/${productId}`, data).then((r) => r.data.data), assignProducts: (merchantId: number, catalogIds: number[]) => request.post(`/platform/merchants/${merchantId}/products/assign`, { catalog_ids: catalogIds }).then((r) => r.data.data as { assigned: number }), wallet: (merchantId: number) => request.get(`/platform/merchants/${merchantId}/wallet`).then((r) => r.data.data as WalletAccount), walletLedger: (merchantId: number, params?: Record) => request.get(`/platform/merchants/${merchantId}/wallet/ledger`, { params }).then((r) => r.data.data as PageResult), adjustWallet: (merchantId: number, data: { amount: number; idempotency_key: string; note?: string }) => request.post(`/platform/merchants/${merchantId}/wallet/adjust`, data).then((r) => r.data.data as WalletAccount), rechargeApplications: (params?: Record) => request.get('/platform/recharge/applications', { params }).then((r) => r.data.data as PageResult), reviewRechargeApplication: (id: number, data: { approved: boolean; review_note?: string }) => request.post(`/platform/recharge/applications/${id}/review`, data).then((r) => r.data.data as RechargeApplication), }