/**
 * 通用文件下载工具
 */

/**
 * 清理文件名，去除 Windows/Unix 非法字符并限制长度
 * @param title 原始标题
 * @param maxLength 最大字符数，默认 80
 */
export function sanitizeFilename(title: string, maxLength = 80): string {
  const cleaned = title
    .replace(/[<>:"/\\|?*\x00-\x1f]/g, '')
    .replace(/\s+/g, ' ')
    .trim()
    .slice(0, maxLength)
  return cleaned || 'untitled'
}

/**
 * 根据标题和日期生成导出文件名（不含扩展名）
 * @param title 文章标题
 * @param date 发布日期字符串
 */
export function buildExportBasename(title: string, date?: string): string {
  const safeTitle = sanitizeFilename(title)
  const safeDate = date ? date.replace(/[^\d-]/g, '').slice(0, 10) : ''
  return safeDate ? `${safeTitle}-${safeDate}` : safeTitle
}

/**
 * 触发浏览器下载 Blob 文件
 * @param blob 文件内容
 * @param filename 完整文件名（含扩展名）
 */
export function downloadBlob(blob: Blob, filename: string): void {
  const url = URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = filename
  link.style.display = 'none'
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  URL.revokeObjectURL(url)
}

/**
 * 将文本内容下载为指定扩展名的文件
 * @param content 文本内容
 * @param filename 完整文件名
 * @param mimeType MIME 类型，默认 text/plain
 */
export function downloadText(content: string, filename: string, mimeType = 'text/plain;charset=utf-8'): void {
  const blob = new Blob([content], { type: mimeType })
  downloadBlob(blob, filename)
}
