///|
/// Demo for conumee module: copy number unified interface.
fn main {
  println("=== conumee Demo: Copy Number Analysis ===")
  println("")

  // Example 1: Create probe data
  println("--- Step 1: Probe Data ---")
  let probes = [
    @src.CnmProbe::new("chr1", 1000, 0.1),
    @src.CnmProbe::new("chr1", 2000, 0.2),
    @src.CnmProbe::new("chr1", 3000, 0.15),
    @src.CnmProbe::new("chr1", 4000, 1.5),
    @src.CnmProbe::new("chr1", 5000, 1.8),
    @src.CnmProbe::new("chr1", 6000, 1.6),
    @src.CnmProbe::new("chr1", 7000, -0.5),
    @src.CnmProbe::new("chr1", 8000, -0.8),
    @src.CnmProbe::new("chr2", 1000, 0.3),
    @src.CnmProbe::new("chr2", 2000, 0.4),
  ]
  let sample = @src.CnmSample::new("sample1", probes)
  println(
    "Sample: " +
    sample.sample_id +
    ", probes=" +
    sample.probes.length().to_string(),
  )
  println("")

  // Example 2: CBS segmentation
  println("--- Step 2: CBS Segmentation ---")
  let segged = @src.cnm_segment(sample, alpha=0.05, nperm=1000)
  println("Segments found: " + segged.segments.length().to_string())
  for i in 0.. 0 {
      println(
        "  Segment " +
        seg.chr +
        ":" +
        seg.start.to_string() +
        " -> " +
        seg.genes.length().to_string() +
        " genes",
      )
    }
  }
  println("")

  // Example 5: Filter segments
  println("--- Step 5: Filter CNVs ---")
  let gains = @src.cnm_filter_segments(
    annotated,
    gain_threshold=2.5,
    loss_threshold=1.5,
  )
  println("CNV segments: " + gains.length().to_string())
  for i in 0..= 2.5 { "gain" } else { "loss" }
    println(
      "  " +
      label +
      ": " +
      seg.chr +
      ":" +
      seg.start.to_string() +
      "-" +
      seg.end.to_string() +
      " CN=" +
      seg.copy_number.to_string(),
    )
  }
  println("")

  // Example 6: TSV export
  println("--- Step 6: TSV Export ---")
  let tsv = @src.cnm_segments_tsv(annotated.segments)
  println("TSV (first 200 chars):")
  let end = if tsv.length() > 200 { 200 } else { tsv.length() }
  println(tsv[0:end])
  println("")

  // Example 7: ASCII plot
  println("--- Step 7: ASCII Plot ---")
  let plot = @src.cnm_ascii_plot(annotated.segments, "chr1")
  println(plot)
  println("")

  // Example 8: Compare two samples
  println("--- Step 8: Sample Comparison ---")
  let probes2 = [
    @src.CnmProbe::new("chr1", 1000, 0.2),
    @src.CnmProbe::new("chr1", 2000, 0.3),
    @src.CnmProbe::new("chr1", 3000, 0.25),
    @src.CnmProbe::new("chr1", 4000, 1.2),
    @src.CnmProbe::new("chr1", 5000, 1.5),
  ]
  let sample2 = @src.CnmSample::new("sample2", probes2)
  let seg2 = @src.cnm_segment(sample2)
  let cmp = @src.cnm_compare_samples(segged, seg2)
  println("Comparison: " + cmp.sample_a + " vs " + cmp.sample_b)
  println("  Shared segments: " + cmp.shared_segments.length().to_string())
  println(
    "  Unique to " + cmp.sample_a + ": " + cmp.unique_a.length().to_string(),
  )
  println(
    "  Unique to " + cmp.sample_b + ": " + cmp.unique_b.length().to_string(),
  )
  println("  Correlation: " + cmp.correlation.to_string())
  println("")

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