/**
 * 清洗 HTML 字符串，仅保留安全标签（如搜索高亮的 <em> 标签）
 * Sanitize HTML string, only allow safe tags like <em> for search highlights
 */
export function sanitizeHtml(html: string): string {
  // 仅允许 <em> 和 </em> 标签，移除所有其他 HTML 标签
  // Only allow <em> and </em> tags, strip all other HTML tags
  const tmp = document.createElement('div')
  tmp.innerHTML = html
  // 递归处理：只保留 em 标签和文本节点
  function walk(node: Node): string {
    let result = ''
    node.childNodes.forEach(child => {
      if (child.nodeType === Node.TEXT_NODE) {
        result += child.textContent ?? ''
      } else if (child.nodeType === Node.ELEMENT_NODE) {
        const el = child as Element
        if (el.tagName === 'EM') {
          result += '<em>' + walk(child) + '</em>'
        } else {
          // 非安全标签：只保留文本内容，丢弃标签
          result += walk(child)
        }
      }
    })
    return result
  }
  return walk(tmp)
}

/**
 * 转义 HTML 特殊字符，防止 XSS
 * Escape HTML special characters to prevent XSS
 */
export function escapeHtml(text: string): string {
  const map: Record<string, string> = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;',
  }
  return text.replace(/[&<>"']/g, (c) => map[c])
}
