#!/usr/bin/env Rscript
# ============================================================
# Map Ensembl IDs -> Gene Symbols for UP/DOWN gene lists
# Male   mapping source: Heart_-_Left_Ventricle_sex1_filter.txt
# Female mapping source: Heart_-_Left_Ventricle_sex2_filter.txt
# ============================================================

map_genes <- function(gene_file, map_file, out_file) {

  # --- load mapping (col1 = Ensembl+version, col2 = symbol) ---
  # Both gene lists and count tables come from the same GTEx source,
  # so versioned IDs are identical — direct join, no version stripping.
  id_map <- read.table(map_file, header = TRUE, sep = "\t",
                       check.names = FALSE)[, 1:2]
  colnames(id_map) <- c("ensembl_full", "symbol")
  id_map <- id_map[!duplicated(id_map$ensembl_full), ]

  # --- load gene list (one Ensembl ID per line, no header) ---
  genes <- read.table(gene_file, header = FALSE, stringsAsFactors = FALSE)
  colnames(genes) <- "ensembl_full"

  # --- merge directly on versioned Ensembl ID ---
  result <- merge(genes, id_map, by = "ensembl_full", all.x = TRUE)
  result <- result[, c("ensembl_full", "symbol")]

  # --- report ---
  n_total   <- nrow(result)
  n_mapped  <- sum(!is.na(result$symbol))
  n_unmapped <- sum(is.na(result$symbol))
  cat("  Input :", gene_file, "\n")
  cat("  Total :", n_total, "  Mapped:", n_mapped,
      "  Unmapped:", n_unmapped, "\n")
  if (n_unmapped > 0) {
    cat("  Unmapped IDs:\n")
    print(result$ensembl_full[is.na(result$symbol)])
  }

  # --- save ---
  write.csv(result, out_file, row.names = FALSE)
  cat("  Saved :", out_file, "\n\n")
  invisible(result)
}

# ============================================================
# MALE
# ============================================================
cat(strrep("=", 50), "\n MALE\n", strrep("=", 50), "\n")

map_male <- "/BRC/yan/heart/getx_LV/male_Heart_-_Left_Ventricle/Heart_-_Left_Ventricle_sex1_filter.txt"
male_dir <- "/BRC/yan/heart/analysis/DEG_LV/male_v2"

map_genes(
  gene_file = file.path(male_dir, "sex1_v2_k3_UP_genes.txt"),
  map_file  = map_male,
  out_file  = file.path(male_dir, "sex1_v2_k3_UP_genes_symbol.csv")
)

map_genes(
  gene_file = file.path(male_dir, "sex1_v2_k3_DOWN_genes.txt"),
  map_file  = map_male,
  out_file  = file.path(male_dir, "sex1_v2_k3_DOWN_genes_symbol.csv")
)

# ============================================================
# FEMALE
# ============================================================
cat(strrep("=", 50), "\n FEMALE\n", strrep("=", 50), "\n")

map_female <- "/BRC/yan/heart/getx_LV/female_Heart_-_Left_Ventricle/Heart_-_Left_Ventricle_sex2_filter.txt"
female_dir <- "/BRC/yan/heart/analysis/DEG_LV/female_v2"

map_genes(
  gene_file = file.path(female_dir, "sex2_v2_k3_UP_genes.txt"),
  map_file  = map_female,
  out_file  = file.path(female_dir, "sex2_v2_k3_UP_genes_symbol.csv")
)

map_genes(
  gene_file = file.path(female_dir, "sex2_v2_k3_DOWN_genes.txt"),
  map_file  = map_female,
  out_file  = file.path(female_dir, "sex2_v2_k3_DOWN_genes_symbol.csv")
)

cat("[Done]\n")
