///|
/// Example: file_demo
/// Demonstrates the Bio.File module (SmartFile with compression support).
fn main {
  // Example 1: Create a SmartFile with automatic compression detection
  println("=== SmartFile Demo ===")
  println("")

  // Plain text file
  let plain_file = @bio.SmartFile::new("data.txt", mode="r")
  let plain_path = plain_file.get_path()
  let plain_fmt = plain_file.get_format().to_string()
  let plain_mode = plain_file.get_mode()
  println("Plain file: \{plain_path}")
  println("Compression: \{plain_fmt}")
  println("Mode: \{plain_mode}")
  println("")

  // Gzip compressed file
  let gz_file = @bio.SmartFile::new("data.txt.gz", mode="r")
  let gz_path = gz_file.get_path()
  let gz_fmt = gz_file.get_format().to_string()
  println("Gzip file: \{gz_path}")
  println("Compression: \{gz_fmt}")
  println("")

  // Bzip2 compressed file
  let bz2_file = @bio.SmartFile::new("data.txt.bz2", mode="r")
  let bz2_path = bz2_file.get_path()
  let bz2_fmt = bz2_file.get_format().to_string()
  println("Bzip2 file: \{bz2_path}")
  println("Compression: \{bz2_fmt}")
  println("")

  // Example 2: Reading from a SmartFile
  println("=== Reading from SmartFile ===")
  let content = "FASTA sequence data\nline 2\nline 3"
  let reader = @bio.smart_file_from_string("sequence.fasta", content)
  println("File content:")
  println(reader.read_all())
  println("")

  // Example 3: Writing to a SmartFile
  println("=== Writing to SmartFile ===")
  let writer = @bio.SmartFile::new("output.txt", mode="w")
  let w1 = writer.write_line(">seq1 Human gene")
  let w2 = w1.write_line("ACGTACGTACGT")
  let written = w2.get_written_content()
  println("Written: \{written}")
  println("")

  // Example 4: Open/Close lifecycle
  println("=== File Lifecycle ===")
  let f = @bio.SmartFile::new("test.txt", mode="r")
  let is_open = f.is_open()
  println("Is open: \{is_open}")
  let opened = f.open()
  let opened_open = opened.is_open()
  println("After open: \{opened_open}")
  let closed = opened.close()
  let closed_open = closed.is_open()
  println("After close: \{closed_open}")
  println("")

  // Example 5: Compression detection utilities
  println("=== Compression Utilities ===")
  let has_gz = @bio.has_compression_extension("data.gz")
  println("Has compression extension (data.gz): \{has_gz}")
  let has_txt = @bio.has_compression_extension("data.txt")
  println("Has compression extension (data.txt): \{has_txt}")
  let stripped_gz = @bio.strip_compression_extension("data.txt.gz")
  println("Strip extension (data.txt.gz): \{stripped_gz}")
  let stripped_txt = @bio.strip_compression_extension("data.txt")
  println("Strip extension (data.txt): \{stripped_txt}")
  println("")

  // Example 6: Summary
  println("=== Summary ===")
  println(plain_file.summary())
}