/**
 * persona feature.description 的展示辅助 —— 把后端那句自包含描述裁成不同密度的展示形态。
 *
 * 后端每个特征产一句 description(如 `重要价值 · 距上次 140 天 · 就诊20次 · 累计¥154,350`),
 * 详情抽屉整句显示,紧凑位(右侧 hint 列 / 标签云 chip)放不下,要短词。
 *
 * 注:这里曾有一套 `[enum] 文本` 前缀的解析(`[gap] 治疗链有 3 处缺口` → chip「缺口」+ 正文),
 * 服务的是 treatment_chain_status / recall_risk / value / do_not_contact_status 四个特征 ——
 * W7 已把它们摘除(前三个并入 rfm,免打扰并入 special_attention)。现存 16 个 extractor
 * 没有一个产 `[enum]` 前缀,那套解析与它的中文字典已随之删除。
 */

/**
 * 短标签 —— 用于"关键事实"等紧凑位置。
 *   `新客/未消费(累计净消费 ¥58.00,含 ...)` → `新客`
 *   `重要价值 · 距上次 140 天 · 累计¥154,350` → `重要价值`
 * 规则:截到第一个分隔符(`·` / `/` / 半角或全角括号)之前。
 */
export function shortPersonaValueLabel(raw: string | null | undefined): string {
  if (!raw) return '—';
  const stop = raw.search(/[·\/(()]/);
  return (stop > 0 ? raw.slice(0, stop) : raw).trim();
}

/**
 * 多值标签的紧凑显示(首值 + `+N` 溢出)。
 *
 * 治疗史 / 权益 / 禁忌 / 潜在治疗 / 时间偏好 / 治疗敏感 / 特别关注 这 7 个特征是「`/` 并列多值」,
 * 直接交给 shortPersonaValueLabel 会在第一个 `/` 处截断、只剩首值且不提示还有更多。
 * 这里改读结构化 `data.labels`(这 7 个后端都带),显示首值 + `+N`,完整列表走 hover 卡片。
 * 单值特征 → `{ text, more: 0 }`。
 */
export function compactPersonaValue(
  raw: string | null | undefined,
  data?: unknown,
): { text: string; more: number } {
  const labels = (data as { labels?: unknown } | null | undefined)?.labels;
  if (Array.isArray(labels) && labels.length > 0 && typeof labels[0] === 'string') {
    return { text: labels[0] as string, more: labels.length - 1 };
  }
  return { text: shortPersonaValueLabel(raw), more: 0 };
}
