///|
/// circrna_demo — find_circ 风格环状 RNA 检测演示:
/// 合成 SAM(注入 2 个 circRNA 的 BSJ split-read + 线性融合读段 +
/// 微小环) -> 反向剪接检测 -> 过滤 -> TSV/JSON.

///|
fn crd_read(qname : String, main_pos : Int32, sa_pos : Int32) -> String {
  let seq = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC"
  "\{qname}\t0\tchr1\t\{main_pos}\t60\t60M\t*\t0\t0\t\{seq}\t*\tSA:Z:chr1,\{sa_pos},+,60M,60,0\n"
}

///|
fn main {
  println("1. find_circ 风格环状 RNA(反向剪接)检测演示")
  let seq = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC"
  let sam = "@HD\tVN:1.6\n@SQ\tSN:chr1\tLN:10000\n" +
    // circRNA A [1000, 2000): 4 条 BSJ 读段(同断点簇)
    crd_read("a1", 1941, 1001) +
    crd_read("a2", 1941, 1001) +
    crd_read("a3", 1941, 1001) +
    crd_read("a4", 1941, 1001) +
    // circRNA B [3000, 3200): 2 条 BSJ 读段
    crd_read("b1", 3141, 3001) +
    crd_read("b2", 3141, 3001) +
    // 线性融合读段(SA 在下游, 不构成 BSJ) x3
    crd_read("f1", 501, 601) +
    crd_read("f2", 501, 601) +
    crd_read("f3", 501, 601) +
    // 微小环 [4000, 4040) 长 40 < 50 被过滤
    "t1\t0\tchr1\t4031\t60\t10M\t*\t0\t0\tACGTACGTAC\t*\tSA:Z:chr1,4001,+,10M,60,0\n" +
    "t2\t0\tchr1\t4031\t60\t10M\t*\t0\t0\tACGTACGTAC\t*\tSA:Z:chr1,4001,+,10M,60,0\n" +
    // 单读环 [5000, 5600) support 1 < 2 被过滤
    crd_read("s1", 5541, 5001) +
    // 无 SA 普通读段
    "n1\t0\tchr1\t100\t60\t60M\t*\t0\t0\t\{seq}\t*\n"
  println(
    "2. 合成 SAM: 2 个 circRNA BSJ 读段簇 + 线性融合/微小环/单读干扰",
  )
  // 3. 检测
  let records = @src.circrna_detect(sam)
  println("3. 检测结果:")
  for r in records {
    println("  \{r.summary()}")
  }
  // 4. 导出
  let tsv = @src.circrna_tsv(records)
  let json = @src.circrna_json(records)
  println("4. TSV \{tsv.length()} 字节, JSON \{json.length()} 字节")
  println(@src.circrna_summary_line(records))
  println(
    "演示完成: SAM split-read -> BSJ 判定 -> 聚合过滤 -> circRNA 记录闭环",
  )
}