///|
/// Demo for cage module: CAGE data TSS analysis.
fn main {
  println("=== CAGE Demo: TSS Identification & Clustering ===")
  println("")

  // Example 1: Create CTSS data
  println("--- Step 1: CTSS Data ---")
  let ctss = [
    @src.CageCtss::new("chr1", 1000, "+", 50),
    @src.CageCtss::new("chr1", 1001, "+", 30),
    @src.CageCtss::new("chr1", 1002, "+", 20),
    @src.CageCtss::new("chr1", 1005, "+", 15),
    @src.CageCtss::new("chr1", 1010, "+", 10),
    @src.CageCtss::new("chr1", 2000, "-", 40),
    @src.CageCtss::new("chr1", 2001, "-", 35),
  ]
  let sample = @src.CageSample::new("sample1", ctss)
  println(
    "Sample: " +
    sample.sample_id +
    ", total tags=" +
    sample.total_tags.to_string(),
  )
  println("")

  // Example 2: Create CAGEset
  println("--- Step 2: CAGEset ---")
  let cs0 = @src.cage_new("my_cage")
  let cs = @src.cage_add_sample(cs0, sample)
  println(
    "CAGEset: " + cs.name + ", samples=" + @src.cage_n_samples(cs).to_string(),
  )
  println("")

  // Example 3: TPM normalization
  println("--- Step 3: TPM Normalization ---")
  let norm = @src.cage_normalize_tpm(cs)
  println("Normalization: " + norm.normalization)
  let s1 = norm.samples[0]
  println("  CTSS 1000+: normalized=" + s1.ctss[0].normalized.to_string())
  println("")

  // Example 4: CTSS clustering
  println("--- Step 4: CTSS Clustering ---")
  let clusters = @src.cage_cluster(norm, max_dist=10, min_tags=2)
  println("Clusters found: " + clusters.length().to_string())
  for i in 0.. 0 {
    let (chr, pos, strand, log2fc, _total) = diff[0]
    println(
      "  " +
      chr +
      ":" +
      pos.to_string() +
      " " +
      strand +
      " log2FC=" +
      log2fc.to_string(),
    )
  }
  println("")

  // Example 8: TSS annotation
  println("--- Step 8: TSS Annotation ---")
  let genes = [("GENE1", 1000, "+", "chr1"), ("GENE2", 2000, "-", "chr1")]
  let ann = @src.cage_annotate_tss(clusters, genes)
  println("Annotations: " + ann.length().to_string())
  for i in 0.. " +
      a.gene_symbol +
      " (" +
      a.feature +
      ")",
    )
  }
  println("")

  println("=== CAGE Demo Complete ===")
}