#!/usr/bin/env Rscript
suppressPackageStartupMessages({
  library(ggplot2)
  library(ggrepel)
})

outdir <- "/BRC/yan/heart/analysis/DAR_compare/"

# ============================================================
# 1. LOAD DATA
# ============================================================
bulk <- read.table(
  paste0(outdir, "heart_DAR_female_vs_male_RUVr_k6_filter.txt"),
  header = TRUE, sep = "\t"
)
cm <- read.table(
  paste0(outdir, "snACAT_CM_DAR_female_vs_male_RUVr_k6_filter.txt"),
  header = TRUE, sep = "\t"
)

# normalize peak ID format to chr_start_end
bulk$peak_id <- gsub("[:-]", "_", bulk$peak)
cm$peak_id   <- gsub("[:-]", "_", cm$peak)

cat("Bulk DAR peaks:", nrow(bulk), "\n")
cat("CM DAR peaks:  ", nrow(cm),   "\n")

# ============================================================
# 2. FULL OUTER JOIN ON PEAK ID
# ============================================================
shared_id <- intersect(bulk$peak_id, cm$peak_id)
cat("Shared peaks (exact ID match):", length(shared_id), "\n")

# shared
if (length(shared_id) > 0) {
  df_shared <- merge(
    bulk[, c("peak_id", "logFC")],
    cm[,   c("peak_id", "logFC")],
    by = "peak_id", suffixes = c("_bulk", "_cm")
  )
  df_shared$group <- "Shared"
} else {
  df_shared <- data.frame(peak_id=character(), logFC_bulk=numeric(),
                          logFC_cm=numeric(), group=character())
}

# bulk-only
bulk_only <- bulk[!bulk$peak_id %in% shared_id, ]
df_bulk <- data.frame(
  peak_id    = bulk_only$peak_id,
  logFC_bulk = bulk_only$logFC,
  logFC_cm   = 0,
  group      = "Bulk DAR"
)

# CM-only
cm_only <- cm[!cm$peak_id %in% shared_id, ]
df_cm <- data.frame(
  peak_id    = cm_only$peak_id,
  logFC_bulk = 0,
  logFC_cm   = cm_only$logFC,
  group      = "CM DAR"
)

df <- rbind(df_shared, df_bulk, df_cm)
df$group <- factor(df$group, levels = c("Shared", "Bulk DAR", "CM DAR"))

cat("Bulk-only:", nrow(df_bulk), "\n")
cat("CM-only:  ", nrow(df_cm),   "\n")

# ============================================================
# 3. SCATTER PLOT
# ============================================================
colors <- c(Shared = "#E64B35", "Bulk DAR" = "#4DBBD5", "CM DAR" = "#00A087")

# label counts in legend
legend_labels <- c(
  Shared    = paste0("Shared (n=",   nrow(df_shared), ")"),
  "Bulk DAR" = paste0("Bulk DAR (n=", nrow(df_bulk),   ")"),
  "CM DAR"   = paste0("CM DAR (n=",   nrow(df_cm),     ")")
)

p <- ggplot(df, aes(x = logFC_bulk, y = logFC_cm, color = group)) +
  geom_hline(yintercept = 0, linewidth = 0.4, color = "grey60") +
  geom_vline(xintercept = 0, linewidth = 0.4, color = "grey60") +
  geom_point(size = 1.2, alpha = 0.6) +
  scale_color_manual(values = colors, labels = legend_labels,
                     name = "Peak group") +
  labs(
    title = "DAR logFC comparison\nBulk heart vs CM snATAC (female vs male)",
    x = "Log2FC - Bulk heart DAR (female vs male, k=6)\n[CM-only peaks fixed at x=0]",
    y = "Log2FC - snATAC CM DAR (female vs male, k=6)\n[Bulk-only peaks fixed at y=0]"
  ) +
  theme_bw() +
  theme(
    plot.title      = element_text(hjust = 0.5, face = "bold", size = 11),
    axis.title      = element_text(size = 9),
    legend.position = "right",
    legend.title    = element_text(face = "bold")
  )

out <- paste0(outdir, "DAR_scatter_bulk_vs_CM.pdf")
ggsave(out, p, width = 7, height = 6)
cat("Saved:", out, "\n")
