///|
/// 读段支持的 VCF 定相演示:
/// 杂合 SNP + 跨位点读段 -> 相位约束图 -> phased GT / 单倍型块.
fn main {
  println("=== 读段支持的 VCF 定相 (read-backed phasing) ===")

  let vcf = @src.parse_vcf(
    "##fileformat=VCFv4.2\n" +
    "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tINFO\tFORMAT\tS1\n" +
    "chr1\t10\t.\tA\tG\t50\tPASS\t.\tGT\t0/1\n" +
    "chr1\t20\t.\tC\tT\t50\tPASS\t.\tGT\t0/1\n" +
    "chr1\t100\t.\tG\tA\t50\tPASS\t.\tGT\t0/1\n",
  )

  // 读段 1: 位点 10=G(alt), 20=C(ref) -> 两等位基因反相.
  // 读段 2: 位点 10=A(ref), 20=T(alt) -> 同上.
  // 读段 3: 位点 10=G(alt), 20=T(alt) -> 与最终相位冲突(模拟测序噪声).
  let reads : Array[@src.PhaseRead] = [
    @src.phase_read_new("r1", "chr1", 0, "40M", seq(40, [(9, 'G'), (19, 'C')])),
    @src.phase_read_new("r2", "chr1", 0, "40M", seq(40, [(9, 'A'), (19, 'T')])),
    @src.phase_read_new("r3", "chr1", 0, "40M", seq(40, [(9, 'G'), (19, 'T')])),
  ]

  let result = @src.phase_vcf_records(vcf, reads, "S1")
  println("\n单倍型块数量 = \{result.blocks}")
  println("读段冲突率   = \{result.conflict_rate}")
  println("\n定相结果:")
  println(@src.phase_result_tsv(result))
  println("JSON 输出:")
  println(@src.phase_result_json(result))
}

///|
fn seq(len : Int32, edits : Array[(Int32, Char)]) -> String {
  let chars : Array[Char] = Array::make(len, 'A')
  for edit in edits {
    chars[edit.0] = edit.1
  }
  let sb = StringBuilder(size_hint=len)
  for c in chars {
    sb.write_char(c)
  }
  sb.to_string()
}