# =========================
# 04 合并 pQTL 与 GWAS 区域数据
# =========================

source("R/config.R")
source("R/utils.R")

loci <- read_loci_file()
summary_list <- list()

for (i in seq_len(nrow(loci))) {
  gene <- loci$Gene[i]
  protein_id <- loci$Protein_ID[i]
  outcome <- loci$Outcome[i]
  outcome_id <- loci$Outcome_ID[i] %||% NA_character_

  cat("Harmonising:", gene, outcome, "\n")

  pqtl_file <- file.path(DIR_PQTL_REGIONS, paste0(gene, "_pQTL_original_region.tsv.gz"))
  gwas_file <- file.path(DIR_GWAS_REGIONS, paste0(gene, "_", outcome, "_GWAS_original_region.tsv.gz"))

  if (!file.exists(pqtl_file) || !file.exists(gwas_file)) {
    warning("Missing pQTL or GWAS file for ", gene, " ", outcome)
    next
  }

  pqtl <- standardise_pqtl(data.table::fread(pqtl_file))
  gwas <- standardise_gwas(data.table::fread(gwas_file))

  merged <- merge(pqtl, gwas, by = "SNP", all = FALSE)

  if ("p_gwas" %in% names(merged)) {
    data.table::setorder(merged, p_gwas)
  }

  merged <- unique(merged, by = "SNP")

  merged[, Gene := gene]
  merged[, Protein_ID := protein_id]
  merged[, Outcome := outcome]
  merged[, Outcome_ID := outcome_id]

  out_file <- file.path(DIR_HARMONISED, paste0(gene, "_", outcome, "_harmonised.tsv.gz"))
  data.table::fwrite(merged, out_file, sep = "\t")

  summary_list[[length(summary_list) + 1]] <- data.frame(
    Gene = gene,
    Protein_ID = protein_id,
    Outcome = outcome,
    Outcome_ID = outcome_id,
    pQTL_SNPs = nrow(pqtl),
    GWAS_SNPs = nrow(gwas),
    Overlap_SNPs = nrow(merged),
    Has_p_gwas = "p_gwas" %in% names(merged) && sum(!is.na(merged$p_gwas)) > 0,
    Has_beta_gwas = "beta_gwas" %in% names(merged) && sum(!is.na(merged$beta_gwas)) > 0,
    Has_se_gwas = "se_gwas" %in% names(merged) && sum(!is.na(merged$se_gwas)) > 0,
    Has_p_pqtl = "p_pqtl" %in% names(merged) && sum(!is.na(merged$p_pqtl)) > 0,
    Output_file = out_file,
    stringsAsFactors = FALSE
  )
}

harm_summary <- data.table::rbindlist(summary_list, fill = TRUE)
openxlsx::write.xlsx(
  harm_summary,
  file.path(DIR_TABLES, "original_loci_harmonise_summary_final.xlsx"),
  overwrite = TRUE
)

write_status("04_harmonise_original_loci", TRUE, "Harmonised files and summary generated.")
