import request from './request' import type { DashboardStats, ApiClient, ApiCredential, CallbackCredential, CallbackSubscription, FulfillmentOrder, LoginResult, Merchant, MerchantMember, MerchantProduct, PageResult, 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 }, register: async (data: { username: string; password: string; nickname?: string }) => { const res = await request.post('/auth/register', data) return res.data.data as User }, 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), 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 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), }