///|
/// BEDPE 交互对格式演示: 解析/统计/区间判断.
fn main raise {
  let content = "chr1\t1000\t2000\tchr1\t5000\t6000\tloop1\t780\t+\t-\nchr1\t3000\t3500\tchr1\t8000\t9000\tloop2\t520\t.\t.\nchr1\t100\t200\tchr2\t500\t600\tsv_deletion\t900\t+\t-\n"
  println("=== 解析 BEDPE ===")
  let pairs = @src.parse_bedpe(content)
  println("  交互对数: " + pairs.length().to_string())
  for p in pairs {
    println(
      "  " +
      p.name +
      ": " +
      p.chrom1 +
      ":" +
      p.start1.to_string() +
      "-" +
      p.end1.to_string() +
      " <-> " +
      p.chrom2 +
      ":" +
      p.start2.to_string() +
      "-" +
      p.end2.to_string() +
      " score=" +
      p.score.to_string(),
    )
  }
  println("=== 同染色体过滤与 loop 长度 ===")
  let same = @src.bedpe_filter_same_chrom(pairs)
  for p in same {
    println("  " + p.name + " loop 长度: " + p.loop_length().to_string())
  }
  println("=== 染色体对计数 ===")
  let counts = @src.bedpe_count_chrom_pairs(pairs)
  for entry in counts {
    println("  " + entry.0 + ": " + entry.1.to_string())
  }
  println("=== 距离直方图(0-5000, 步长 1000) ===")
  let hist = @src.bedpe_distance_histogram(same, 0, 1000, 5)
  for i, n in hist {
    println(
      "  [" +
      (i * 1000).to_string() +
      ", " +
      ((i + 1) * 1000).to_string() +
      "): " +
      n.to_string(),
    )
  }
  println("=== 区间重叠判断 ===")
  let p0 = pairs[0]
  println(
    "  loop1 与 chr1:5500-6500 重叠: " +
    p0.overlaps_region("chr1", 5500, 6500).to_string(),
  )
  println(
    "  loop1 与 chr1:2500-3500 重叠: " +
    p0.overlaps_region("chr1", 2500, 3500).to_string(),
  )
  println("=== 写出往返 ===")
  let out = @src.write_bedpe(pairs)
  let reparsed = @src.parse_bedpe(out)
  println("  往返条数: " + reparsed.length().to_string())
  println("  loop1 score 保持: " + reparsed[0].score.to_string())
}