///|
/// DSS Demo - Differential Expression and Methylation Analysis.
/// Inspired by Bioconductor DSS package.
fn main {
  println("=== DSS Demo ===")

  // 1. Load example count data
  println("")
  println("1. Load example count data:")
  let data = @bio.dss_create_example_counts()
  println("   Genes: " + data.dss_n_genes().to_string())
  println("   Samples: " + data.dss_n_samples().to_string())

  // 2. Run dispersion estimation
  println("")
  println("2. Estimate dispersion:")
  let disp = @bio.dss_estimate_dispersion(data)
  let dispersions = disp.dss_get_dispersions()
  let shrunken = disp.dss_get_shrunken_dispersions()
  let mut i = 0
  while i < dispersions.length() {
    println(
      "   Gene " +
      (i + 1).to_string() +
      ": dispersion=" +
      dispersions[i].to_string() +
      ", shrunken=" +
      shrunken[i].to_string(),
    )
    i = i + 1
  }

  // 3. Run DE analysis
  println("")
  println("3. Differential expression analysis (Wald test):")
  let de_result = @bio.dss_deseq(data, disp)
  println("   Total genes: " + de_result.dss_n_genes().to_string())
  println(
    "   Significant genes (FDR < 0.05): " +
    de_result.dss_n_significant().to_string(),
  )
  let mut j = 0
  while j < de_result.dss_n_genes() {
    println(
      "   " +
      de_result.dss_get_gene_id(j) +
      ": wald=" +
      de_result.wald_stat[j].to_string() +
      ", pval=" +
      de_result.dss_get_pvalue(j).to_string() +
      ", adj_pval=" +
      de_result.dss_get_adj_pvalue(j).to_string(),
    )
    j = j + 1
  }

  // 4. Load methylation data
  println("")
  println("4. Load example methylation data:")
  let methyl = @bio.dss_create_example_methylation()
  println("   CpG sites: " + methyl.dss_n_cpgs().to_string())
  println("   Samples: " + methyl.dss_n_samples().to_string())

  // 5. Run DM analysis
  println("")
  println("5. Differential methylation analysis:")
  let dm_result = @bio.dss_dml(methyl)
  println("   Total CpG sites: " + dm_result.dss_n_sites().to_string())
  println(
    "   Significant sites (FDR < 0.05): " +
    dm_result.dss_n_significant().to_string(),
  )
  let mut k = 0
  while k < dm_result.dss_n_sites() {
    println(
      "   " +
      dm_result.cpg_ids[k] +
      ": delta_meth=" +
      dm_result.dss_get_delta_meth(k).to_string() +
      ", stat=" +
      dm_result.stats[k].to_string() +
      ", adj_pval=" +
      dm_result.adj_p_values[k].to_string(),
    )
    k = k + 1
  }

  // 6. Run DMR detection
  println("")
  println(
    "6. Detect differentially methylated regions (min_cpgs=2, min_delta=0.1):",
  )
  let dmr_result = @bio.dss_dmr(methyl, dm_result, 2, 0.1)
  println("   DMR count: " + dmr_result.dss_n_dmrs().to_string())
  let mut m = 0
  while m < dmr_result.dss_n_dmrs() {
    let (id, chrom, start, end, n_cpgs, mean_delta) = dmr_result.dss_get_dmr(m)
    println(
      "   " +
      id +
      ": " +
      chrom +
      ":" +
      start.to_string() +
      "-" +
      end.to_string() +
      ", CpGs=" +
      n_cpgs.to_string() +
      ", mean_delta=" +
      mean_delta.to_string(),
    )
    m = m + 1
  }

  println("")
  println("=== DSS Demo Completed ===")
}