///|
fn print_result(prefix : String, result : Result[String, String]) -> Unit {
  match result {
    Ok(message) => println(prefix + message)
    Err(message) => println(prefix + "error: " + message)
  }
}

///|
fn main {
  let engine = @moonbio.BioEngine::new()
  println("MoonBio CLI demo")

  let global = engine.global_align("GATTACA", "GCATGCU")
  println("Global alignment score: \{global.score}")
  println("Seq1: \{global.alignment_a}")
  println("Seq2: \{global.alignment_b}")

  let msa = engine.multiple_align(["GATTACA", "GCATGCU", "GACTACA"])
  println("MSA consensus: \{msa.consensus}")
  for i = 0; i < msa.aligned_sequences.length(); i = i + 1 {
    println("MSA[\{i}]: \{msa.aligned_sequences[i]}")
  }

  let fasta_demo = ">seq1\nGATTACA\n>seq2\nGACTATA\n"
  let fastq_demo = "@read1\nGATTACA\n+\nIIIIIII\n@read2\nGACTATA\n+\nHHHHHHH\n"
  print_result("FASTA summary: ", engine.summarize_fasta(fasta_demo))
  print_result("FASTQ summary: ", engine.summarize_fastq(fastq_demo))
}