import { api } from '@/lib/api' import type { RedemptionRequest, PaymentRequest, AmountRequest, AffiliateTransferRequest, ApiResponse, TopupInfoResponse, RedemptionResponse, AmountResponse, PaymentResponse, StripePaymentResponse, AffiliateCodeResponse, AffiliateTransferResponse, BillingHistoryResponse, CompleteOrderRequest, CreemPaymentRequest, CreemPaymentResponse, WaffoPaymentRequest, WaffoPaymentResponse, WaffoPancakePaymentRequest, WaffoPancakePaymentResponse, } from './types' // ============================================================================ // Wallet API Functions // ============================================================================ /** * Check if API response is successful */ export function isApiSuccess(response: ApiResponse): boolean { return response.success === true || response.message === 'success' } /** * Get topup configuration info */ export async function getTopupInfo(): Promise { const res = await api.get('/api/user/topup/info') return res.data } /** * Redeem a topup code */ export async function redeemTopupCode( request: RedemptionRequest ): Promise { const res = await api.post('/api/user/topup', request) return res.data } /** * Calculate payment amount for regular payment */ export async function calculateAmount( request: AmountRequest ): Promise { const res = await api.post('/api/user/amount', request, { skipBusinessError: true, } as Record) return res.data } /** * Calculate payment amount for Stripe payment */ export async function calculateStripeAmount( request: AmountRequest ): Promise { const res = await api.post('/api/user/stripe/amount', request, { skipBusinessError: true, } as Record) return res.data } /** * Request regular payment */ export async function requestPayment( request: PaymentRequest ): Promise { const res = await api.post('/api/user/pay', request, { skipBusinessError: true, } as Record) return { ...res.data, url: res.data.url || (res as unknown as { url?: string }).url, } } /** * Request Stripe payment */ export async function requestStripePayment( request: PaymentRequest ): Promise { const res = await api.post('/api/user/stripe/pay', request, { skipBusinessError: true, } as Record) return res.data } /** * Request Creem payment */ export async function requestCreemPayment( request: CreemPaymentRequest ): Promise { const res = await api.post('/api/user/creem/pay', request, { skipBusinessError: true, } as Record) return res.data } /** * Request Waffo payment */ export async function requestWaffoPayment( request: WaffoPaymentRequest ): Promise { const res = await api.post('/api/user/waffo/pay', request, { skipBusinessError: true, } as Record) return res.data } /** * Calculate payment amount for Waffo Pancake payment */ export async function calculateWaffoPancakeAmount( request: AmountRequest ): Promise { const res = await api.post('/api/user/waffo-pancake/amount', request, { skipBusinessError: true, } as Record) return res.data } /** * Request Waffo Pancake payment */ export async function requestWaffoPancakePayment( request: WaffoPancakePaymentRequest ): Promise { const res = await api.post('/api/user/waffo-pancake/pay', request, { skipBusinessError: true, } as Record) return res.data } /** * Get affiliate code */ export async function getAffiliateCode(): Promise { const res = await api.get('/api/user/aff') return res.data } /** * Transfer affiliate quota to balance */ export async function transferAffiliateQuota( request: AffiliateTransferRequest ): Promise { const res = await api.post('/api/user/aff_transfer', request) return res.data } /** * Get billing history for current user */ export async function getUserBillingHistory( page: number, pageSize: number, keyword?: string ): Promise> { const params = new URLSearchParams({ p: page.toString(), page_size: pageSize.toString(), }) if (keyword) { params.append('keyword', keyword) } const res = await api.get(`/api/user/topup/self?${params.toString()}`) return res.data } /** * Get billing history for all users (admin only) */ export async function getAllBillingHistory( page: number, pageSize: number, keyword?: string ): Promise> { const params = new URLSearchParams({ p: page.toString(), page_size: pageSize.toString(), }) if (keyword) { params.append('keyword', keyword) } const res = await api.get(`/api/user/topup?${params.toString()}`) return res.data } /** * Complete a pending order (admin only) */ export async function completeOrder( request: CompleteOrderRequest ): Promise { const res = await api.post('/api/user/topup/complete', request) return res.data }