/**
 * 展示标签 + tone 元数据 — 后端 enum 跟前端 UI 之间的桥。
 *
 * 单一真理源,前后端共用。新加 enum 值时在这里加一行 label,前端自动拿到。
 */
import { PersonaFeatureKey, PlanScenario } from './enums';

// ─────────────────────────────────────────────────────────
// Tone — UI 色板键(对应前端 Tailwind 色板 teal/indigo/...)
// ─────────────────────────────────────────────────────────

export type Tone =
  | 'teal'
  | 'indigo'
  | 'emerald'
  | 'amber'
  | 'rose'
  | 'sky'
  | 'violet'
  | 'slate';

// ─────────────────────────────────────────────────────────
// PlanScenario 中文展示标签
// ─────────────────────────────────────────────────────────

export const PLAN_SCENARIO_LABEL: Record<string, string> = {
  [PlanScenario.TREATMENT_AFTERCARE_RECALL]: '疗效保障',
  [PlanScenario.TREATMENT_INITIATION_RECALL]: '应治未治',
  treatment_chain_disruption_recall: '链中断', // 待业务拍板,暂未入 enum
  missed_diagnosis_recall: '漏诊召回', // W6+ 影像 AI
};

export const planScenarioLabel = (key: string): string =>
  PLAN_SCENARIO_LABEL[key] ?? key;

// ─────────────────────────────────────────────────────────
// PersonaFeatureKey 中文展示 + UI tone
// ─────────────────────────────────────────────────────────

/**
 * 只登记**在跑的** 16 个标签 —— 与 PERSONA_FEATURE_SPECS 一一对应
 * (CI 对账见 pac-service tests/persona-spec-drift.spec.ts)。
 *
 * 曾经把 PersonaFeatureKey 里全部枚举值(含 W7 摘除的 value / treatment_chain_status /
 * recall_risk / do_not_contact_status,以及一批只存在于路线图上的候选 key)都列在这里,
 * 结果是"看着有 30 个标签、实际只出 16 个"。枚举保留路线图,展示元数据只登记真会上屏的。
 *
 * tone 的语义(客服要能扫一眼分轻重,所以红色是稀缺资源):
 *   rose   ⚠️ 警示 —— 看到要小心/要避让(禁忌、爽约、敏感、急迫)
 *   amber  ⏳ 机会 —— 有事可做(潜在治疗、治疗史这类可切入点)
 *   indigo 💰 价值 —— 钱与权益
 *   teal   📈 阶段 —— 客户所处位置
 *   sky/slate 基础属性 —— 不需要判断,只是背景信息
 */
export const PERSONA_FEATURE_META: Record<string, { label: string; tone: Tone }> = {
  // ⚠️ 警示
  [PersonaFeatureKey.URGENCY_LEVEL]: { label: '急迫等级', tone: 'rose' },
  [PersonaFeatureKey.SPECIAL_ATTENTION]: { label: '特别关注', tone: 'rose' },
  [PersonaFeatureKey.CONTRAINDICATION]: { label: '禁忌标签', tone: 'rose' },
  [PersonaFeatureKey.TREATMENT_SENSITIVITY]: { label: '治疗敏感', tone: 'rose' },
  // ⏳ 机会 / 可切入点
  [PersonaFeatureKey.POTENTIAL_TREATMENT]: { label: '潜在治疗', tone: 'amber' },
  [PersonaFeatureKey.TREATMENT_HISTORY]: { label: '治疗史', tone: 'amber' },
  // 💰 价值与权益(折扣锚点是价格参考,不是警示 —— 原来标红与"禁忌"同色,轻重不分)
  [PersonaFeatureKey.RFM]: { label: '价值分群', tone: 'indigo' },
  [PersonaFeatureKey.ENTITLEMENT_STATUS]: { label: '权益身份', tone: 'indigo' },
  [PersonaFeatureKey.DISCOUNT_ANCHOR]: { label: '折扣锚点', tone: 'indigo' },
  // 📈 阶段与关系(转介绍达人是正面信息,同理不该标红)
  [PersonaFeatureKey.LIFECYCLE_STAGE]: { label: '生命周期', tone: 'teal' },
  [PersonaFeatureKey.REFERRAL_CHAMPION]: { label: '转介绍达人', tone: 'teal' },
  // 基础属性
  [PersonaFeatureKey.TIME_PREFERENCE]: { label: '时间偏好', tone: 'sky' },
  [PersonaFeatureKey.AGE_BRACKET]: { label: '年龄段', tone: 'sky' },
  [PersonaFeatureKey.ACQUISITION_CHANNEL]: { label: '获客渠道', tone: 'slate' },
  [PersonaFeatureKey.FAMILY_STRUCTURE]: { label: '家庭构成', tone: 'slate' },
  [PersonaFeatureKey.GENDER]: { label: '性别', tone: 'slate' },
};

export const personaFeatureMeta = (key: string): { label: string; tone: Tone } =>
  PERSONA_FEATURE_META[key] ?? { label: key, tone: 'slate' };
