///|
/// vg_lite_demo — vg 风格泛基因组变异图基因分型演示:
/// 参考 + VCF 变异集 -> 变异图(节点/边) -> 单倍型路径枚举 ->
/// 读段滑窗 Hamming 分派 -> 二倍体 GT -> GFA/JSON.

///|
fn vgd_reference() -> String {
  let sb = StringBuilder()
  for _i = 0; _i < 10; _i = _i + 1 {
    sb.write_string("ACGT")
  }
  sb.to_string()
}

///|
fn vgd_vcf() -> String {
  "##fileformat=VCFv4.2\n" +
  "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\n" +
  "chr1\t5\t.\tA\tG\t.\tPASS\t.\n" +
  "chr1\t21\t.\tA\tC\t.\tPASS\t.\n" +
  "chr1\t33\t.\tT\tTA\t.\tPASS\t.\n"
}

///|
fn main {
  let reference = vgd_reference()
  let vcf = @src.parse_vcf(vgd_vcf())
  println("1. 输入: 40bp 参考 + 3 双等位变异(SNV x2 + 插入 x1)")
  // 2. 构图
  let graph = @src.vg_build_graph("chr1", reference, vcf.records)
  println(
    "2. 变异图: \{graph.nodes.length()} 节点 / \{graph.edges.length()} 边",
  )
  for n in graph.nodes {
    println("  节点 \{n.id} [\{n.kind}] \{n.seq.length()}bp")
  }
  // 3. 路径枚举
  let paths = @src.vg_paths(graph)
  println("3. 单倍型路径 \{paths.length()} 条:")
  for p in paths {
    let mut tag = ""
    for id in p.node_ids {
      tag = tag + "\{id} "
    }
    println("  [\{tag}] \{p.seq.length()}bp")
  }
  // 4. 分型(杂合样本: 3 ref + 3 变异1 读段)
  let reads = [
    "ACGTACGTAC", "ACGTACGTAC", "ACGTACGTAC", "ACGTGCGTAC", "ACGTGCGTAC", "ACGTGCGTAC",
  ]
  let gt = @src.vg_genotype(paths, reads)
  let g = gt.unwrap()
  println("4. 基因分型(6 条读段):")
  println("  GT = \{g.gt}")
  println("  等位支持 = \{g.counts[0]} / \{g.counts[1]}")
  let mut pc = ""
  for c in g.path_counts {
    pc = pc + "\{c} "
  }
  println("  全部路径计数: \{pc}")
  // 5. GFA / JSON
  let gfa = @src.vg_to_gfa(graph)
  let json = @src.json_to_string(@src.vg_value(graph, paths, gt))
  println("5. GFA \{gfa.length()} 字节, JSON \{json.length()} 字节")
  println(@src.vg_summary_line(graph, paths))
  println(
    "演示完成: VCF -> 变异图 -> 单倍型路径 -> 图上分型闭环",
  )
}