/**
 * 课程资料相关类型定义
 */

/**
 * 课程资料信息
 */
export interface Material {
  id: number
  course_id: number
  name: string
  description?: string
  file_url: string
  file_type: string
  file_size: number
  created_at: string
  updated_at?: string
}

/**
 * 预览类型
 * 支持格式：TXT、Markdown、MDX、PDF、HTML、Excel、Word、CSV、VTT、Properties、视频、音频、图片
 */
export type PreviewType = 'pdf' | 'text' | 'html' | 'download' | 'video' | 'audio' | 'image'

/**
 * 预览信息
 */
export interface PreviewInfo {
  preview_type: PreviewType
  preview_url?: string
  content?: string  // 文本内容（仅text类型）
  file_name: string
  original_url: string
  file_size: number
  is_converted?: boolean  // 是否经过转换（Office文档）
}

/**
 * 文件类型图标映射
 * 支持格式：TXT、Markdown、MDX、PDF、HTML、Excel、Word、CSV、VTT、Properties
 */
export const FILE_TYPE_ICONS: Record<string, string> = {
  // PDF
  pdf: 'document',
  
  // Office文档
  doc: 'document',
  docx: 'document',
  xls: 'document',
  xlsx: 'document',
  
  // 文本
  txt: 'document',
  md: 'document',
  mdx: 'document',
  csv: 'tickets',
  vtt: 'document',
  properties: 'setting',
  
  // HTML
  html: 'document',
  htm: 'document',
}

/**
 * 获取文件类型图标
 */
export function getFileTypeIcon(fileName: string): string {
  const ext = fileName.split('.').pop()?.toLowerCase() || ''
  return FILE_TYPE_ICONS[ext] || 'document'
}

/**
 * 格式化文件大小
 */
export function formatFileSize(bytes: number): string {
  if (bytes === 0) return '0 B'
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`
}

/**
 * 获取文件扩展名
 */
export function getFileExtension(fileName: string): string {
  return fileName.split('.').pop()?.toLowerCase() || ''
}

/**
 * 判断文件类型
 * 支持格式：TXT、Markdown、MDX、PDF、HTML、Excel、Word、CSV、VTT、Properties、视频、音频、图片
 */
export function getFileCategory(fileName: string): 'document' | 'text' | 'video' | 'audio' | 'image' | 'other' {
  const ext = getFileExtension(fileName)
  
  // 视频格式
  const videoFormats = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', 'mkv']
  if (videoFormats.includes(ext)) {
    return 'video'
  }
  
  // 音频格式
  const audioFormats = ['mp3', 'wav', 'ogg', 'aac', 'flac', 'm4a']
  if (audioFormats.includes(ext)) {
    return 'audio'
  }
  
  // 图片格式
  const imageFormats = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']
  if (imageFormats.includes(ext)) {
    return 'image'
  }
  
  // 文档格式
  const documentFormats = [
    'pdf', 'doc', 'docx', 'xls', 'xlsx',
    'txt', 'md', 'mdx', 'csv', 'vtt', 'properties',
    'html', 'htm'
  ]
  if (documentFormats.includes(ext)) {
    return 'document'
  }
  
  return 'other'
}

