///|
/// IMGT module demo - ImMunoGeneTics HLA sequence format parser and writer.
///
/// Run: moon run examples/imgt_demo
fn main {
  println("=== IMGT Module Demo ===")
  println("ImMunoGeneTics information system HLA sequence format")
  println("Reference: Robinson J et al. (2015) Nucleic Acids Res 43:D423-31")
  println("")

  // ------------------------------------------------------------------
  // 1. Load sample IMGT records
  // ------------------------------------------------------------------
  println("=== 1. Load sample IMGT records ===")
  let records = @bio.imgt_sample_records()
  println("Loaded \{records.length()} sample IMGT record(s)")
  println("")

  // ------------------------------------------------------------------
  // 2. Print summary (n_records, unique species, unique genes)
  // ------------------------------------------------------------------
  println("=== 2. Summary ===")
  let n_records = @bio.imgt_n_records(records)
  let species = @bio.imgt_unique_species(records)
  let genes = @bio.imgt_unique_genes(records)
  println("n_records: \{n_records}")
  println("unique species: \{species.length()}")
  for i in 0.. 0 {
    let p = parsed[0]
    let h = p.header()
    println("  accession: \{h.accession()}")
    println("  seq_id: \{h.seq_id()}")
    println("  gene: \{h.gene()}")
    println("  species: \{h.species()}")
    println("  sequence: \{p.sequence()}")
    println("  sequence length: \{p.sequence().length()}")
  }
  println("")

  // ------------------------------------------------------------------
  // 6. Write records to IMGT format and show output
  // ------------------------------------------------------------------
  println("=== 6. Write records to IMGT format ===")
  let output = @bio.imgt_write(records)
  println("Serialized \{records.length()} record(s) to IMGT text:")
  // Print each line of the output.
  let lines = output.split("\n").to_array()
  for i in 0.. 0 {
      println("  |\{lines[i]}")
    }
  }
  println("")
  // Show a single record serialization as well.
  println("Single record serialization (record 0):")
  println(@bio.imgt_record_to_string(records[0]))
  println("")

  // ------------------------------------------------------------------
  // 7. Convert to SeqRecord array and show
  // ------------------------------------------------------------------
  println("=== 7. Convert to SeqRecord array ===")
  let seq_records = @bio.imgt_to_seq_records(records)
  println("Converted \{seq_records.length()} ImgtRecord(s) to SeqRecord(s)")
  for i in 0.. {
      let h = rec.header()
      println("Found accession '\{acc_to_find}':")
      println("  seq_id: \{h.seq_id()}")
      println("  gene: \{h.gene()}")
      println("  species: \{h.species()}")
      println("  sequence length: \{rec.sequence().length()}")
    }
    None => println("Accession '\{acc_to_find}' not found")
  }
  println("")
  // Search for an accession that does NOT exist.
  let missing_acc = "HLA99999"
  match @bio.imgt_get_by_accession(records, missing_acc) {
    Some(_) => println("Unexpected: found accession '\{missing_acc}'")
    None => println("Accession '\{missing_acc}' not found (expected)")
  }
  println("")

  println("=== Demo complete ===")
}