# ============================================================
# 02_download.R —— 下载 10x Visium 人乳腺癌 demo 数据（对应教程第 07 章）
# 用法：Rscript code/02_download.R
# 数据来源：10x Genomics 官网公开 demo 数据集（V1 Breast Cancer Block A Section 1）
# 说明：若官网 URL 有更新，可到 https://www.10xgenomics.com/datasets 重新获取链接。
# ============================================================

dir.create("data/raw", recursive = TRUE, showWarnings = FALSE)

## 1. 定义下载地址
base_url <- "https://cf.10xgenomics.com/samples/spatial-exp/1.1.0/V1_Breast_Cancer_Block_A_Section_1"
expr_url  <- file.path(base_url, "V1_Breast_Cancer_Block_A_Section_1_filtered_feature_bc_matrix.tar.gz")
spat_url  <- file.path(base_url, "V1_Breast_Cancer_Block_A_Section_1_spatial.tar.gz")

## 2. 下载（mode = "wb" 保证二进制）
download.file(expr_url, "data/raw/expr_matrix.tar.gz", mode = "wb")
download.file(spat_url, "data/raw/spatial.tar.gz",    mode = "wb")

## 3. 解压（都解压到 data/raw/visium/ 下，与 Load10X_Spatial 的目录结构匹配）
dir.create("data/raw/visium", recursive = TRUE, showWarnings = FALSE)
untar("data/raw/expr_matrix.tar.gz", exdir = "data/raw/visium")
untar("data/raw/spatial.tar.gz",     exdir = "data/raw/visium")

## 4. 校验文件结构（应同时看到 filtered_feature_bc_matrix.h5 和 spatial/ 目录）
cat("解压后的目录内容：\n")
print(list.files("data/raw/visium", recursive = TRUE))

## 5. （可选）校验文件完整性：记录 md5，便于日后核对
md5_files <- list.files("data/raw", pattern = "tar.gz$", full.names = TRUE)
print(tools::md5sum(md5_files))

cat("数据下载完成！下一步运行 code/03_preprocess.R 进行预处理。\n")
