library(GO.db)
library(AnnotationDbi)
library(dplyr)

source("/BRC/yan/heart/gtex_GO/ancestor_remove_redundancy.R")

bp_general_blacklist_auto <- read.csv(
  "/BRC/yan/heart/gtex_GO/bp_general_blacklist_auto.csv",
  header = TRUE
)$GO.ID

txt_files <- list.files(
  "/BRC/yan/heart/gtex_GO",
  pattern = "\\.txt$",
  full.names = TRUE
)

for (f in txt_files) {
  sample_name <- tools::file_path_sans_ext(basename(f))
  message("\n── 处理: ", sample_name, " ──")

  df_raw <- read.delim(f, header = TRUE, sep = "\t", check.names = TRUE)

  df_filtered <- df_raw |>
    dplyr::filter(
      q.value.Bonferroni < 0.05,
      Hit.Count.in.Query.List > 10
    )

  message("过滤后保留 ", nrow(df_filtered), " 个 GO term")

  if (nrow(df_filtered) == 0) {
    warning(sample_name, ": 过滤后无数据，跳过。实际列名：",
            paste(colnames(df_raw), collapse = ", "))
    next
  }

  result <- annotate_go_with_representative_ancestor(
    df                   = df_filtered,
    go_id_col            = "ID",
    go_name_col          = "Name",
    bp_general_blacklist = bp_general_blacklist_auto,
    add_status           = TRUE
  )

  message("代表性祖先 term 数：", length(unique(result$ancestor_TERM_final)))

  out_path <- file.path(
    "/BRC/yan/heart/gtex_GO",
    paste0(sample_name, "_annotated.csv")
  )
  write.csv(result, out_path, row.names = FALSE)
  message("已保存：", basename(out_path))
}
