import type { PageTemplateCatalogItem, PageTemplateFavoriteResult, PageTemplatePurchaseResult, RechargeOrder } from '../types'; import { API, ApiError, apiFetch } from './core'; export type TemplateCheckoutResult = { ok: boolean; order?: RechargeOrder & { skillName?: string; label?: string }; skillName?: string; grantedSkills?: string[]; balanceCents?: number; alreadyOwned?: boolean; }; export async function getPageTemplateCatalog(): Promise { const result = await apiFetch<{ data?: { items?: PageTemplateCatalogItem[] }; items?: PageTemplateCatalogItem[] }>( '/mindspace/v1/template-catalog', ); return result.data?.items ?? result.items ?? []; } export async function getMyPageTemplates(): Promise { const result = await apiFetch<{ data?: { items?: PageTemplateCatalogItem[] }; items?: PageTemplateCatalogItem[] }>( '/mindspace/v1/template-catalog/mine', ); return result.data?.items ?? result.items ?? []; } export async function purchasePageTemplate(skillName: string): Promise { try { const result = await apiFetch<{ data: PageTemplatePurchaseResult }>( `/mindspace/v1/template-catalog/${encodeURIComponent(skillName)}/purchase`, { method: 'POST' }, ); return result.data; } catch (error) { if (error instanceof ApiError && error.status === 402) { throw error; } throw error; } } export async function createTemplateWechatCheckout( skillName: string, payScene: 'native' | 'h5' | 'jsapi', ): Promise { const result = await apiFetch<{ data: TemplateCheckoutResult }>( `/mindspace/v1/template-catalog/${encodeURIComponent(skillName)}/checkout`, { method: 'POST', body: JSON.stringify({ payScene }), }, ); return result.data; } export async function togglePageTemplateFavorite(skillName: string): Promise { const result = await apiFetch<{ data: PageTemplateFavoriteResult }>( `/mindspace/v1/template-catalog/${encodeURIComponent(skillName)}/favorite`, { method: 'POST' }, ); return result.data; } export function getTemplatePreviewUrl(skillName: string) { return `${API}/mindspace/v1/template-catalog/${encodeURIComponent(skillName)}/preview`; } export function formatTemplatePrice(cents: number) { if (cents <= 0) return '免费'; return `¥${(cents / 100).toFixed(cents % 100 === 0 ? 0 : 2)}`; } export { API, ApiError };