// ============================================================
// 统一读取入口:按扩展名自动分派
// ============================================================

///|
/// 统一读取结果。调用方按格式 match 得到对应结构。
pub enum Content {
  /// TXT:按行拆分的文本
  Lines(Array[String])
  /// CSV:二维表(行 → 字段)
  Table(Array[Array[String]])
  /// JSON:动态值
  JsonValue(Json)
  /// JSONL:每行一个 JSON 对象
  JsonRows(Array[Json])
  /// XML:根元素(元素树)
  XmlDoc(XmlElement)
  /// Markdown:块结构列表
  MarkdownBlocks(Array[MarkdownBlock])
  /// ZIP:包内条目(文件名 + 内容字节)
  ZipFiles(Array[ZipEntry])
  /// TAR:包内条目(文件名 + 内容字节)
  TarFiles(Array[TarEntry])
  /// DOCX:文档全部文本
  DocxText(String)
  /// XLSX:全部工作表(含多 sheet)
  ExcelSheets(Array[ExcelSheet])
  /// PPTX:每页文本
  PptxSlides(Array[String])
  /// PDF:每页文本
  PdfPages(Array[String])
} derive(Eq, @debug.Debug)

///|
/// 一键读取:根据扩展名自动识别格式并返回对应结果。
pub fn read(path : String) -> Content raise ReaderError {
  match detect_format(path) {
    FileFormat::Txt => Content::Lines(read_txt_by_line(path))
    FileFormat::Csv => Content::Table(read_csv_by_line(path))
    FileFormat::Json => Content::JsonValue(read_json(path))
    FileFormat::Jsonl => Content::JsonRows(read_jsonl_by_line(path))
    FileFormat::Xml => Content::XmlDoc(read_xml(path))
    FileFormat::Markdown => Content::MarkdownBlocks(read_markdown(path))
    FileFormat::Zip => Content::ZipFiles(read_zip_entries(path))
    FileFormat::Tar => Content::TarFiles(read_tar_entries(path))
    FileFormat::Docx => Content::DocxText(read_docx_text(path))
    FileFormat::Xlsx => Content::ExcelSheets(read_excel_sheets(path))
    FileFormat::Pptx => Content::PptxSlides(read_pptx_text_by_slide(path))
    FileFormat::Pdf => Content::PdfPages(read_pdf_text_by_page(path))
  }
}