import { assertVipPaymentMethod, normalizeVipCapability, normalizeVipOrders, normalizeVipPackages, normalizeVipPaymentOrder, normalizeVipPaymentStatus } from './vip-contract.js' import { createRequestError, requestStrict } from './request-client.js' const assertVipId = (value, field) => { const id = value === undefined || value === null ? '' : String(value) if (!/^[1-9]\d*$/.test(id)) { throw createRequestError(`${field}无效`, 'VIP_REQUEST_INVALID') } return id } export const vipApi = { async getVipCapability(requestOptions = {}) { const capability = await requestStrict({ url: '/genealogy/app/vip/capability', method: 'GET' }, { requestController: requestOptions.requestController ?? null }) return normalizeVipCapability(capability) }, async getVipPackages(requestOptions = {}) { const packages = await requestStrict({ url: '/genealogy/app/vip/packages', method: 'GET' }, { requestController: requestOptions.requestController ?? null }) return normalizeVipPackages(packages) }, async getVipOrders(requestOptions = {}) { const orders = await requestStrict({ url: '/genealogy/app/vip/orders', method: 'GET' }, { requestController: requestOptions.requestController ?? null }) return normalizeVipOrders(orders) }, async createVipOrder(packageId, genealogyId = '', paymentMethod, requestId, requestOptions = {}) { if (typeof requestId !== 'string' || !requestId.trim() || requestId.length > 64) { throw createRequestError('VIP 下单请求号无效', 'VIP_REQUEST_INVALID') } const order = await requestStrict({ url: '/genealogy/app/vip/orders', method: 'POST', data: { packageId: assertVipId(packageId, 'VIP 套餐标识'), ...(genealogyId ? { genealogyId: assertVipId(genealogyId, '家谱标识') } : {}), paymentMethod: assertVipPaymentMethod(paymentMethod), requestId: requestId.trim() } }, { requestController: requestOptions.requestController ?? null }) return normalizeVipPaymentOrder(order, paymentMethod) }, async getVipPaymentStatus(transactionId, requestOptions = {}) { const status = await requestStrict({ url: `/genealogy/app/vip/orders/${assertVipId(transactionId, '支付流水标识')}/payment`, method: 'GET' }, { requestController: requestOptions.requestController ?? null }) return normalizeVipPaymentStatus(status) }, async closeVipPayment(transactionId, requestOptions = {}) { const status = await requestStrict({ url: `/genealogy/app/vip/orders/${assertVipId(transactionId, '支付流水标识')}/close`, method: 'POST' }, { requestController: requestOptions.requestController ?? null }) return normalizeVipPaymentStatus(status) } }