/**
 * 剥离 Markdown 语法字符，返回纯文本。
 *
 * 用于列表/卡片摘要等纯文本预览场景（详情页应 v-html 富文本渲染，不用此函数）。
 * 仅去除粗体、斜体、删除线、标题、行内代码、代码块围栏、列表、引用、
 * 链接、图片等 Markdown 语法标记，保留文字内容。
 *
 * 动机（UX-260618-13）：列表摘要用纯文本插值显示 AI 生成内容，
 * 数据源含 Markdown 语法字符会裸字符外露，列表空间小且配合截断，
 * 剥离比富文本渲染更合适。
 */

/** 剥离 Markdown 语法，返回纯文本；空输入返回空串 */
export function stripMd(text: string | null | undefined): string {
  if (!text) return ''
  return text
    .replace(/!\[([^\]]*)\]\([^)]*\)/g, '$1') // 图片 alt
    .replace(/\[([^\]]*)\]\([^)]*\)/g, '$1') // 链接文本
    .replace(/```[^\n]*\n?/g, '') // 代码块围栏开(含任意 infostring 至换行,如 rust,norun)
    .replace(/```/g, '') // 代码块围栏闭
    .replace(/`([^`]+)`/g, '$1') // 行内代码
    .replace(/^\s{0,3}>\s?/gm, '') // 引用
    .replace(/^\s{0,3}[-*+]\s+/gm, '') // 无序列表
    .replace(/^\s{0,3}\d+\.\s+/gm, '') // 有序列表
    .replace(/^#{1,6}\s+/gm, '') // 标题
    .replace(/^\s*[-=]{3,}\s*$/gm, '') // 水平线
    .replace(/\*\*([^*]+)\*\*/g, '$1') // 粗体
    .replace(/__([^_]+)__/g, '$1') // 粗体下划线
    .replace(/\*([^*]+)\*/g, '$1') // 斜体
    .replace(/_([^_]+)_/g, '$1') // 斜体下划线
    .replace(/~~([^~]+)~~/g, '$1') // 删除线
    .replace(/\s+/g, ' ') // 折叠连续空白
    .trim()
}
