/**
 * HTML 安全过滤工具
 * 使用 DOMPurify 过滤富文本中的危险标签和属性，防止 XSS 攻击
 */
import DOMPurify from 'dompurify'

// 配置 DOMPurify：允许安全的标签，过滤危险内容
const config = {
  ALLOWED_TAGS: [
    'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
    'p', 'br', 'hr', 'blockquote', 'pre', 'code',
    'ul', 'ol', 'li',
    'a', 'strong', 'em', 'b', 'i', 'u', 's', 'sub', 'sup',
    'img', 'figure', 'figcaption',
    'table', 'thead', 'tbody', 'tr', 'th', 'td',
    'div', 'span', 'section',
    'video', 'audio', 'source',
  ],
  ALLOWED_ATTR: [
    'href', 'target', 'rel',
    'src', 'alt', 'title', 'width', 'height',
    'class', 'style',
    'controls', 'autoplay', 'loop', 'muted',
    'colspan', 'rowspan',
  ],
  // 强制给 a 标签添加 rel="noopener noreferrer"
  ADD_ATTR: ['target'],
  // 返回字符串而非 TrustedHTML
  RETURN_TRUSTED_TYPE: false,
}

/**
 * 过滤 HTML 内容，移除危险标签和属性
 * @param dirty 未经过滤的 HTML 字符串
 * @returns 安全的 HTML 字符串
 */
export function sanitizeHtml(dirty: string): string {
  if (!dirty) return ''
  return DOMPurify.sanitize(dirty, config) as string
}
