import { apiClient, unwrapData } from '@/shared/api/client' import type { ApiResponse } from '@/shared/api/types' import type { CreatePaymentAccountPayload, CreateWithdrawalPayload, PaymentAccount, PaymentAccountPage, UpdatePaymentAccountPayload, WalletAccount, WalletLedger, WalletLedgerPage, WithdrawalPage, WithdrawalRecord, } from '@/features/wallet/types' export const WALLET_PAGE_SIZE = 20 export function fetchWalletBalance() { return unwrapData(apiClient.get>('/wallet/balance')) } export function fetchWalletLedger(page = 1, pageSize = WALLET_PAGE_SIZE) { return unwrapData>( apiClient.get>>('/wallet/ledger', { params: { page, page_size: pageSize }, }) ).then(data => ({ items: (data.items ?? []) as WalletLedger[], total: data.total ?? 0, page: data.page ?? page, page_size: data.page_size ?? pageSize, })) } export function fetchPaymentAccounts(page = 1, pageSize = WALLET_PAGE_SIZE) { return unwrapData>( apiClient.get>>('/payment-accounts', { params: { page, page_size: pageSize }, }) ).then(data => ({ items: (data.items ?? []) as PaymentAccount[], total: data.total ?? 0, page: data.page ?? page, page_size: data.page_size ?? pageSize, })) } export function createPaymentAccount(payload: CreatePaymentAccountPayload) { return unwrapData( apiClient.post>('/payment-accounts', payload) ) } export function updatePaymentAccount(id: number, payload: UpdatePaymentAccountPayload) { return unwrapData( apiClient.put>(`/payment-accounts/${id}`, payload) ) } export function deletePaymentAccount(id: number) { return unwrapData<{ deleted: boolean }>( apiClient.delete>(`/payment-accounts/${id}`) ) } export function setDefaultPaymentAccount(id: number) { return unwrapData<{ updated: boolean }>( apiClient.post>(`/payment-accounts/${id}/set-default`) ) } export function fetchWithdrawals(page = 1, pageSize = WALLET_PAGE_SIZE) { return unwrapData>( apiClient.get>>('/withdrawals', { params: { page, page_size: pageSize }, }) ).then(data => ({ items: (data.items ?? []) as WithdrawalRecord[], total: data.total ?? 0, page: data.page ?? page, page_size: data.page_size ?? pageSize, })) } export function createWithdrawal(payload: CreateWithdrawalPayload) { return unwrapData( apiClient.post>('/withdrawals', payload) ) } export function cancelWithdrawal(id: number) { return unwrapData<{ cancelled: boolean }>( apiClient.post>(`/withdrawals/${id}/cancel`) ) }