///|
/// Demo for mirna_targets module: miRNA target prediction.
fn main {
  println("=== mirna_targets Demo: miRNA Target Prediction ===")
  println("")

  // Example 1: Extract miRNA seed (DNA alphabet)
  println("--- Step 1: Extract miRNA Seed ---")
  // Note: Use DNA alphabet (T instead of U) for sequences
  let mirna = "TGGAATGTAAAGAAGTATGTAT" // hsa-miR-1 (DNA)
  let seed = @src.mir_extract_seed(mirna)
  let seed6 = @src.mir_extract_seed6(mirna)
  println("miRNA: " + mirna)
  println("Seed (pos 2-8): " + seed)
  println("Seed6 (pos 2-7): " + seed6)
  println("")

  // Example 2: Find seed matches in a 3'UTR
  println("--- Step 2: Find Seed Matches ---")
  // miRNA seed = "GGAATGT", rc = "ACATTCC"
  // UTR with "ACATTCC" preceded by A -> 8mer
  let utr = "AATACATTCCGGGUUU"
  let sites = @src.mir_find_seed_matches(
    mirna,
    utr,
    mir_id="hsa-miR-1",
    target_id="TEST_GENE",
  )
  println("3'UTR: " + utr)
  println("Sites found: " + sites.length().to_string())
  for s in sites {
    println(
      "  pos=" +
      s.utr_pos.to_string() +
      " len=" +
      s.site_len.to_string() +
      " type=" +
      @src.mir_seed_type_label(s.seed_type) +
      " score=" +
      s.score.to_string(),
    )
  }
  println("")

  // Example 3: Predict targets for multiple miRNAs
  println("--- Step 3: Predict Targets ---")
  let mirnas = [
    ("hsa-let-7a", "TGAGGTAGTAGGTTGTATAGTT"),
    ("hsa-miR-1", "TGGAATGTAAAGAAGTATGTAT"),
  ]
  let utrs = [
    ("GENE1", "AACTACCTCCTCAACATACAACCTACTACCTCATT"),
    ("GENE2", "AATACATTCCGGGUUU"),
  ]
  let results = @src.mir_predict_targets(mirnas, utrs, min_score=0.1)
  println("Results: " + results.length().to_string())
  for r in results {
    println(
      "  " +
      r.mir_id +
      " -> " +
      r.target_id +
      " (score=" +
      r.total_score.to_string() +
      ")",
    )
  }
  println("")

  // Example 4: Export sites
  println("--- Step 4: Export Sites ---")
  let tsv = @src.mir_export_sites(results)
  println(tsv)
  println("")

  // Example 5: Count by seed type
  println("--- Step 5: Count by Seed Type ---")
  let counts = @src.mir_count_by_seed_type(results)
  println("8mer: " + counts.get("8mer").unwrap_or(0).to_string())
  println("7mer-m8: " + counts.get("7mer-m8").unwrap_or(0).to_string())
  println("7mer-A1: " + counts.get("7mer-A1").unwrap_or(0).to_string())
  println("6mer: " + counts.get("6mer").unwrap_or(0).to_string())
}