#!/usr/bin/env bash
# 首次一键配置（幂等，可重复运行）：
#   装 uv（用户级）→ 项目内 venv（Python 3.12）→ CPU 版 torch → 其余依赖 → 预下载模型
# 全程无需 sudo，不动系统 Python。
#
# 用法：
#   ./setup.sh            完整配置（依赖 + 约 3GB 模型）
#   ./setup.sh --check    只校验是否已配置（供 run.sh 自动引导），就绪退出码 0，否则 1
set -euo pipefail
cd "$(dirname "$0")"

MARKER=".venv/.a2t-ready"

# 配置指纹：依赖清单或本安装脚本内容变化 → 指纹不匹配 → 视为未配置，自动重装
stamp() { sha256sum requirements.txt setup.sh 2>/dev/null | sha256sum | cut -d' ' -f1; }

if [ "${1:-}" = "--check" ]; then
  if [ -x .venv/bin/python ] && [ -f "$MARKER" ] && [ "$(cat "$MARKER")" = "$(stamp)" ]; then
    exit 0
  fi
  exit 1
fi

# 1) uv：没有则装（用户级，装到 ~/.local/bin，无需 sudo）
if ! command -v uv >/dev/null 2>&1; then
  echo "==> 安装 uv（用户级，~/.local/bin）…"
  curl -LsSf https://astral.sh/uv/install.sh | sh
fi
export PATH="$HOME/.local/bin:$PATH"
if ! command -v uv >/dev/null 2>&1; then
  echo "uv 安装失败。可从 https://github.com/astral-sh/uv/releases 手动下载" >&2
  echo "x86_64-unknown-linux-gnu tar 包，解压出 uv 放入 ~/.local/bin 后重跑本脚本。" >&2
  exit 1
fi

# 2) 项目内 venv（Python 3.12；uv 自动下载托管版 CPython，不动系统 Python）
if [ ! -x .venv/bin/python ]; then
  echo "==> 创建项目内 venv（Python 3.12）…"
  uv venv --python 3.12 .venv
fi
source .venv/bin/activate

# 3) 先装 CPU 版 torch（必须用 CPU 源，否则会拉 2GB+ 的 CUDA 包；本机无 GPU）
echo "==> 安装 CPU 版 torch / torchaudio（download.pytorch.org 的 cpu 源）…"
uv pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu

# 4) 其余依赖
echo "==> 安装其余依赖（faster-whisper / funasr / modelscope …）…"
uv pip install -r requirements.txt

# 5) 建目录 + 预下载全部模型（联网一次，之后可离线转写）
mkdir -p input_audio output_text models
python transcribe.py --download-only

printf '%s\n' "$(stamp)" > "$MARKER"
echo
echo "配置完成。以后：把音频放进 input_audio/ 然后运行 ./run.sh"
