/**
 * 客户端文件下载工具
 *
 * 覆盖以下重复模式：
 * - grades/export-button.tsx 中的 downloadBase64File
 * - users/user-import-dialog.tsx 中的 downloadBase64File
 * - audit/audit-log-export-button.tsx 中的 Blob 下载逻辑
 *
 * 注意：仅在客户端使用（依赖 document、URL.createObjectURL 等 API）。
 */

const EXCEL_MIME_TYPE =
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

/**
 * 将 base64 编码的数据下载为文件
 * @param base64 base64 编码的文件内容
 * @param filename 下载文件名
 * @param mimeType MIME 类型，默认为 Excel
 */
export function downloadBase64File(
  base64: string,
  filename: string,
  mimeType: string = EXCEL_MIME_TYPE
): void {
  const binary = atob(base64)
  const bytes = new Uint8Array(binary.length)
  for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i)
  const blob = new Blob([bytes], { type: mimeType })
  downloadBlob(blob, filename)
}

/**
 * 将 Blob 数据下载为文件
 * @param blob Blob 数据
 * @param filename 下载文件名
 */
export function downloadBlob(blob: Blob, filename: string): void {
  const url = URL.createObjectURL(blob)
  const a = document.createElement("a")
  a.href = url
  a.download = filename
  document.body.appendChild(a)
  a.click()
  document.body.removeChild(a)
  URL.revokeObjectURL(url)
}
