import request from './request' import type { DashboardStats, ApiClient, ApiCredential, CallbackCredential, CallbackSubscription, CreateTestOrderResult, DeliveryBindResult, DeliveryOrderInfo, DeliveryLinkResult, DeliverySubmitResult, FulfillmentOrder, LoginResult, Merchant, MerchantMember, MerchantProduct, PageResult, ProductCatalogItem, 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), createProduct: (data: Partial & { product_code?: string product_name?: string category?: string description?: string attributes?: string }) => request.post('/merchant/products', data).then((r) => r.data.data as MerchantProduct), updateProduct: (id: number, data: Partial) => request.patch(`/merchant/products/${id}`, data).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' }) => request.post('/merchant/orders/test', data).then((r) => r.data.data as CreateTestOrderResult), 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), adjustWallet: (data: { amount: number; idempotency_key: string; note?: string }) => request.post('/merchant/wallet/adjust', data).then((r) => r.data.data as WalletAccount), 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), callbacks: () => request.get('/merchant/callbacks').then((r) => r.data.data as CallbackSubscription[]), createCallback: (data: { name: string; url: string; events: string }) => request.post('/merchant/callbacks', data).then((r) => r.data.data as CallbackCredential), updateCallbackStatus: (id: number, status: CallbackSubscription['status']) => request.patch(`/merchant/callbacks/${id}/status`, { status }).then((r) => r.data.data), 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), } 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[]), assignProducts: (merchantId: number, catalogIds: number[]) => request.post(`/platform/merchants/${merchantId}/products/assign`, { catalog_ids: catalogIds }).then((r) => r.data.data as { assigned: number }), }