///|
/// BSGenome Demo
fn main {
  println("=== BSGenome Demo ===")

  println("\n1. Create Genome Object:")
  println("========================")
  let genome = @bio.create_demo_genome()
  println("Name: " + genome.name)
  println("Organism: " + genome.organism)
  println("Provider: " + genome.provider)
  println("Release: " + genome.release)
  println("Chromosome Count: " + genome.chromosome_count().to_string())
  println("Total Length: " + genome.total_length().to_string())

  println("\n2. Chromosome Names:")
  println("====================")
  let chr_names = genome.chromosome_names()
  let mut i = 0
  while i < chr_names.length() {
    let len = genome.chromosome_length(chr_names[i])
    println(
      "  - " +
      chr_names[i] +
      " (" +
      (if len is Some(_) { len.unwrap().to_string() } else { "N/A" }) +
      " bp)",
    )
    i = i + 1
  }

  println("\n3. Get Chromosome Sequence:")
  println("===========================")
  let chr1_seq = genome.chromosome_sequence("chr1")
  if chr1_seq is Some(_) {
    println("chr1: " + chr1_seq.unwrap()[0:20].to_owned() + "...")
  }

  println("\n4. Get Subsequence:")
  println("===================")
  let subseq = genome.get_sequence("chr1", 0, 10)
  if subseq is Some(_) {
    println("chr1:0-10: " + subseq.unwrap())
  }

  let subseq2 = genome.get_subseq("chr1", 10, 8)
  if subseq2 is Some(_) {
    println("chr1:10+8: " + subseq2.unwrap())
  }

  println("\n5. Extract Gene (Strand-aware):")
  println("===============================")
  let gene_plus = genome.extract_gene("chr1", 0, 12, "+")
  if gene_plus is Some(_) {
    println("Gene (+ strand): " + gene_plus.unwrap())
  }

  let gene_minus = genome.extract_gene("chr1", 0, 12, "-")
  if gene_minus is Some(_) {
    println("Gene (- strand): " + gene_minus.unwrap())
  }

  println("\n6. Check Chromosome Existence:")
  println("==============================")
  println("Has chr1: " + genome.has_chromosome("chr1").to_string())
  println("Has chr4: " + genome.has_chromosome("chr4").to_string())
  println("Has chrX: " + genome.has_chromosome("chrX").to_string())

  println("\n=== Demo Complete ===")
}