///|
/// FSSP module demo - Fold classification based on Structure-Structure
/// alignment of Proteins database parser.
///
/// Run: moon run examples/fssp_demo
fn main {
  println("=== FSSP Module Demo ===")
  println("Structure-Structure alignment of Proteins database parser")
  println("Reference: Holm L, Sander C (1996) Science 273:595-603")
  println("")

  // ------------------------------------------------------------------
  // 1. Generate and parse sample FSSP file
  // ------------------------------------------------------------------
  println("=== 1. Generate and parse sample FSSP file ===")
  let text = @bio.fssp_sample_text()
  let data = @bio.fssp_parse(text)
  println(
    "Parsed FSSP file with " + data.n_alignments().to_string() + " alignments",
  )
  println("")

  // ------------------------------------------------------------------
  // 2. Display header information
  // ------------------------------------------------------------------
  println("=== 2. Header information ===")
  let h = data.header()
  println("Reference PDB ID: " + h.pdbid())
  println("Date: " + h.pdbid_date())
  println("Title: " + h.title())
  println("Compound: " + h.compound())
  println("Source: " + h.source())
  println("Author: " + h.author())
  println("Sequence length: " + h.seq_length().to_string())
  println("Number of alignments: " + h.n_alignments().to_string())
  println("Z-score threshold: " + h.threshold())
  println("")

  // ------------------------------------------------------------------
  // 3. Display reference alignment
  // ------------------------------------------------------------------
  println("=== 3. Reference alignment ===")
  let ref_aln = data.reference().unwrap()
  println("PDB ID: " + ref_aln.pdbid())
  println("Start position: " + ref_aln.start_position().to_string())
  println("Aligned sequence: " + ref_aln.aligned_sequence())
  println("Z-score: " + ref_aln.z_score().to_string())
  println("RMSD: " + ref_aln.rmsd().to_string())
  println("Alignment length: " + ref_aln.lali().to_string())
  println("Percent identity: " + ref_aln.pid().to_string() + "%")
  println("")

  // ------------------------------------------------------------------
  // 4. Display all alignments
  // ------------------------------------------------------------------
  println("=== 4. All alignments ===")
  let alignments = data.alignments()
  for i in 0..= 10.0 ===")
  let high_z = data.filter_by_zscore(10.0)
  println(
    "Found " +
    high_z.length().to_string() +
    " alignment(s) with Z-score >= 10.0",
  )
  for a in high_z {
    println("  " + a.pdbid() + ": Z=" + a.z_score().to_string())
  }
  println("")

  // ------------------------------------------------------------------
  // 6. Full summary
  // ------------------------------------------------------------------
  println("=== 6. Full FSSP summary ===")
  println(data.to_string())

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