export type PairingAccessState = | "available" | "request_pending" | "gated" | "inactive" | "full"; export type BetaOnboardingState = | "request_needed" | "request_pending" | "ready" | "full"; export type BetaOnboarding = { state: BetaOnboardingState; pairingAccessState: PairingAccessState; primaryHref: string; primaryLabel: string; tone: "good" | "warn" | "neutral" | "info"; title: string; detail: string; }; export function deriveBetaOnboarding(input: { entitlement: { mode: "public_beta" | "grant" | "none"; publicBetaState: "open" | "gated" | "inactive"; unlimited: boolean; availableSlots: number | null; }; hasPendingRequest: boolean; }): BetaOnboarding { const { entitlement } = input; if (entitlement.mode === "none") { if (input.hasPendingRequest) { return { state: "request_pending", pairingAccessState: "request_pending", primaryHref: "/dashboard/billing", primaryLabel: "查看申请进度", tone: "warn", title: "免费闭测申请正在审核", detail: "处理结果会显示在公测权益页;审核期间不需要重复申请。", }; } const gated = entitlement.publicBetaState === "gated"; return { state: "request_needed", pairingAccessState: gated ? "gated" : "inactive", primaryHref: "/dashboard/billing", primaryLabel: "申请免费闭测", tone: gated ? "warn" : "neutral", title: gated ? "公开接入尚未开放" : "当前没有免费测试资格", detail: gated ? "安全门禁仍在核对,可以先申请小范围免费闭测。" : "可以提交免费闭测申请;不会绑定支付方式或自动转为付费。", }; } if (!entitlement.unlimited && (entitlement.availableSlots ?? 0) < 1) { return { state: "full", pairingAccessState: "full", primaryHref: "/dashboard/hosts", primaryLabel: "管理已接入主机", tone: "neutral", title: "当前免费主机名额已用完", detail: "可以取消等待中的配对、撤销不再使用的主机,或等待管理员调整闭测名额。", }; } return { state: "ready", pairingAccessState: "available", primaryHref: "/dashboard/hosts/new", primaryLabel: "连接主机", tone: "good", title: entitlement.mode === "grant" ? "闭测资格已生效" : "免费公测资格已生效", detail: entitlement.unlimited ? "当前策略不按主机槽位限额,可以开始连接主机。" : `还可以连接 ${entitlement.availableSlots ?? 0} 台主机。`, }; }