#!/usr/bin/env Rscript

# ============================================================
# Check h5ad single-cell reference
# ============================================================

suppressPackageStartupMessages({
  library(zellkonverter)
  library(SingleCellExperiment)
})

# ============================================================
# 1. INPUT
# ============================================================

h5ad_file <- "WMB-10XMulti-log2.h5ad"

# ============================================================
# 2. LOAD REFERENCE
# ============================================================

cat("========================================\n")
cat("Loading reference:\n")
cat(h5ad_file, "\n")
cat("========================================\n\n")

adata <- readH5AD(h5ad_file)

# ============================================================
# 3. BASIC INFO
# ============================================================

cat("========================================\n")
cat("BASIC INFO\n")
cat("========================================\n")

print(adata)

cat("\nDimensions (genes x cells):\n")
print(dim(adata))

cat("\nAssays:\n")
print(assayNames(adata))

cat("\nReduced dimensions:\n")
print(reducedDimNames(adata))

# ============================================================
# 4. CELL METADATA
# ============================================================

cat("\n========================================\n")
cat("CELL METADATA (colData)\n")
cat("========================================\n")

cell_cols <- colnames(colData(adata))

cat("\nNumber of metadata columns:\n")
print(length(cell_cols))

cat("\nMetadata column names:\n")
print(cell_cols)

cat("\nFirst few rows of metadata:\n")
print(head(as.data.frame(colData(adata))))

# ============================================================
# 5. GENE METADATA
# ============================================================

cat("\n========================================\n")
cat("GENE METADATA (rowData)\n")
cat("========================================\n")

gene_cols <- colnames(rowData(adata))

cat("\nGene metadata columns:\n")
print(gene_cols)

cat("\nFirst few genes:\n")
print(head(rownames(adata)))

cat("\nFirst few rows of gene metadata:\n")
print(head(as.data.frame(rowData(adata))))

# ============================================================
# 6. EXPRESSION MATRIX
# ============================================================

cat("\n========================================\n")
cat("EXPRESSION MATRIX\n")
cat("========================================\n")

expr <- assay(adata)

cat("\nExpression matrix class:\n")
print(class(expr))

cat("\nExpression matrix dimensions:\n")
print(dim(expr))

cat("\nFirst 5x5 matrix slice:\n")
print(expr[1:5, 1:5])

# ============================================================
# 7. CELL TYPE SUMMARY
# ============================================================

cat("\n========================================\n")
cat("CELL TYPE SUMMARY\n")
cat("========================================\n")

possible_labels <- c(
  "class",
  "subclass",
  "supertype",
  "cell_type",
  "cluster"
)

for (lab in possible_labels) {
  
  if (lab %in% cell_cols) {
    
    cat("\n-----------------------------\n")
    cat("Metadata:", lab, "\n")
    cat("-----------------------------\n")
    
    tb <- table(colData(adata)[[lab]])
    
    print(head(sort(tb, decreasing = TRUE), 20))
  }
}

# ============================================================
# 8. CHECK UMAP
# ============================================================

cat("\n========================================\n")
cat("UMAP CHECK\n")
cat("========================================\n")

if ("X_umap" %in% reducedDimNames(adata)) {
  
  umap <- reducedDim(adata, "X_umap")
  
  cat("\nUMAP dimensions:\n")
  print(dim(umap))
  
  cat("\nFirst few UMAP coordinates:\n")
  print(head(umap))
  
} else {
  
  cat("\nNo X_umap found.\n")
}

# ============================================================
# 9. SAVE SUMMARY
# ============================================================

summary_file <- "reference_summary.txt"

sink(summary_file)

cat("Reference file:\n")
cat(h5ad_file, "\n\n")

cat("Dimensions:\n")
print(dim(adata))

cat("\nAssays:\n")
print(assayNames(adata))

cat("\nReducedDims:\n")
print(reducedDimNames(adata))

cat("\nCell metadata columns:\n")
print(cell_cols)

cat("\nGene metadata columns:\n")
print(gene_cols)

sink()

cat("\n========================================\n")
cat("DONE\n")
cat("========================================\n")

cat("\nSummary saved to:\n")
cat(summary_file, "\n")
