#!/bin/bash
set -euo pipefail

PROJECT_DIR=""
SPECIES="mouse"
GENOME_FASTA=""
CHROMSIZES=""
CBUST_PATH=""
MOTIF_DIR=""
SCRIPT_DIR=""
PYTHON_EXEC="python3"

while [[ $# -gt 0 ]]; do
    case "$1" in
        --project_dir)  PROJECT_DIR="$2";  shift 2 ;;
        --species)      SPECIES="$2";      shift 2 ;;
        --genome_fasta) GENOME_FASTA="$2"; shift 2 ;;
        --chrom_sizes)  CHROMSIZES="$2";   shift 2 ;;
        --cbust_path)   CBUST_PATH="$2";   shift 2 ;;
        --motif_dir)    MOTIF_DIR="$2";    shift 2 ;;
        --script_dir)   SCRIPT_DIR="$2";   shift 2 ;;
        --python_exec)  PYTHON_EXEC="$2";  shift 2 ;;
        --help|-h)
            echo "用法: $0 --project_dir <path> --species <mouse|human|fly|chicken|rat>"
            echo ""
            echo "必填参数:"
            echo "  --project_dir   <path>   项目根目录"
            echo "  --species       <name>   物种名: mouse, human, fly, chicken, rat"
            echo "  --genome_fasta  <path>   参考基因组 FASTA 文件"
            echo "  --chrom_sizes   <path>   染色体大小文件"
            echo "  --cbust_path    <path>   cbust 可执行文件路径"
            echo "  --motif_dir     <path>   motif collection singletons 目录"
            echo "  --script_dir    <path>   create_cisTarget_databases 辅助脚本目录"
            echo ""
            echo "可选参数:"
            echo "  --python_exec   <path>   Python 可执行文件路径 (默认: python3)"
            exit 0
            ;;
        *) echo "未知参数: $1"; exit 1 ;;
    esac
done

# 必填参数检查
missing=""
[ -z "$PROJECT_DIR"  ] && missing="$missing --project_dir"
[ -z "$SPECIES"      ] && missing="$missing --species"
[ -z "$GENOME_FASTA" ] && missing="$missing --genome_fasta"
[ -z "$CHROMSIZES"   ] && missing="$missing --chrom_sizes"
[ -z "$CBUST_PATH"   ] && missing="$missing --cbust_path"
[ -z "$MOTIF_DIR"    ] && missing="$missing --motif_dir"
[ -z "$SCRIPT_DIR"   ] && missing="$missing --script_dir"

if [ -n "$missing" ]; then
    echo "错误: 以下必填参数未指定: $missing"
    echo "使用 --help 查看用法"
    exit 1
fi

# ==============================================================================
# 项目目录
# ==============================================================================
DATA_DIR="${PROJECT_DIR}/data"
CISTARGET_DIR="${PROJECT_DIR}/cisTarget"
INPUT_BED="${PROJECT_DIR}/pycisTopic/consensus_regions.bed"

# ==============================================================================
# 创建输出目录
# ==============================================================================
mkdir -p "${CISTARGET_DIR}"

# ==============================================================================
# 前置文件检查
# ==============================================================================
if [ ! -f "${INPUT_BED}" ]; then
    echo "错误: 输入 BED 文件不存在: ${INPUT_BED}"
    echo "请先运行 step 1 (pycisTopic 主题建模)"
    exit 1
fi

if [ ! -f "${GENOME_FASTA}" ]; then
    echo "错误: 基因组 FASTA 不存在: ${GENOME_FASTA}"
    exit 1
fi

if [ ! -f "${CHROMSIZES}" ]; then
    echo "错误: 染色体大小文件不存在: ${CHROMSIZES}"
    exit 1
fi

if [ ! -f "${CBUST_PATH}" ]; then
    echo "错误: cbust 可执行文件不存在: ${CBUST_PATH}"
    exit 1
fi

echo "[Step 2] 开始构建 ${SPECIES} cisTarget 数据库..."
echo "[Step 2] 输入 BED:    ${INPUT_BED}"
echo "[Step 2] 基因组 FASTA: ${GENOME_FASTA}"
echo "[Step 2] 输出目录:    ${CISTARGET_DIR}"

REGION_BED="${INPUT_BED}"
PADDED_FASTA="${CISTARGET_DIR}/${SPECIES}_custom.padded.fa"
MOTIF_LIST="${CISTARGET_DIR}/motifs.txt"
DB_PREFIX="${CISTARGET_DIR}/${SPECIES}_custom"

echo "[Step 2.1] 从 ${MOTIF_DIR} 生成 motif 列表..."
if [ ! -d "${MOTIF_DIR}" ]; then
    echo "错误: Motif 目录不存在: ${MOTIF_DIR}"
    exit 1
fi
ls "${MOTIF_DIR}"/*.cb | xargs -n 1 basename > "${MOTIF_LIST}"

if [ ! -s "${MOTIF_LIST}" ]; then
    echo "错误: 在 ${MOTIF_DIR} 中未找到 motif 文件"
    exit 1
fi
echo "[Step 2.1] 找到 $(wc -l < "${MOTIF_LIST}") 个 motif。"

echo "[Step 2.2] 创建带背景填充的 FASTA..."
if [ ! -f "${SCRIPT_DIR}/create_fasta_with_padded_bg_from_bed.sh" ]; then
    echo "错误: 辅助脚本不存在: ${SCRIPT_DIR}/create_fasta_with_padded_bg_from_bed.sh"
    exit 1
fi

"${SCRIPT_DIR}/create_fasta_with_padded_bg_from_bed.sh" \
    "${GENOME_FASTA}" \
    "${CHROMSIZES}" \
    "${REGION_BED}" \
    "${PADDED_FASTA}" \
    1000 \
    yes

if [ ! -f "${PADDED_FASTA}" ]; then
    echo "错误: 未能创建 padded FASTA"
    exit 1
fi
echo "[Step 2.2] padded FASTA 创建完成。"

echo "[Step 2.3] 运行 create_cistarget_motif_databases.py..."
if [ ! -f "${SCRIPT_DIR}/create_cistarget_motif_databases.py" ]; then
    echo "错误: 辅助脚本不存在: ${SCRIPT_DIR}/create_cistarget_motif_databases.py"
    exit 1
fi

"$PYTHON_EXEC" "${SCRIPT_DIR}/create_cistarget_motif_databases.py" \
    -f "${PADDED_FASTA}" \
    -M "${MOTIF_DIR}" \
    -m "${MOTIF_LIST}" \
    -o "${DB_PREFIX}" \
    -c "${CBUST_PATH}" \
    -t 40 \
    --bgpadding 1000

echo ""
echo "[Step 2] cisTarget 数据库构建完成。"
echo "[Step 2] 输出文件:"
echo "[Step 2]   Rankings DB: ${DB_PREFIX}.regions_vs_motifs.rankings.feather"
echo "[Step 2]   Scores DB:   ${DB_PREFIX}.regions_vs_motifs.scores.feather"
