#!/usr/bin/env bash
# avatar-E2E-inference 추론 가중치를 GitHub Release에서 받아 제자리에 푼다.
#
# 가중치는 .gitignore로 git에서 제외되므로 fresh clone에는 코드만 온다. 이 스크립트가
# private 리포의 릴리스 에셋(pack_weights.py가 만든 tar 3개)을 받아 저장소 상대경로
# 그대로 복원한다. private 리포라 gh 인증이 필요하다 — 인증 없는 URL 접근은 404다.
#
#   ./fetch-weights.sh                 # 기본 태그(weights-v4-vel)에서 받기
#   ./fetch-weights.sh weights-v4-vel  # 태그 지정
#   FORCE=1 ./fetch-weights.sh         # 이미 있는 가중치 덮어쓰기
#
# 주의: 번들의 best.pth는 optimizer state를 뺀 추론 전용이다. 학습 재개가 필요한
# 머신에서는 FORCE=1로 덮어쓰지 말 것.
set -euo pipefail

TAG="${1:-weights-v4-vel}"
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT="$(cd "$HERE/../.." && pwd)"
FLOW="package/motion-blender/experiments/wave-hands/outputs/gen_train/weights_v4_vel/best.pth"

command -v gh >/dev/null || { echo "gh CLI가 없다: https://cli.github.com" >&2; exit 1; }
gh auth status >/dev/null 2>&1 || { echo "gh 인증 필요: gh auth login" >&2; exit 1; }

if [ -e "$ROOT/$FLOW" ] && [ "${FORCE:-0}" != "1" ]; then
  echo "이미 가중치가 있다: $FLOW"
  echo "덮어쓰려면 FORCE=1 ./fetch-weights.sh  (학습 머신이면 optimizer state가 사라진다)"
  exit 0
fi

TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT

echo "[1/3] $TAG 에셋 다운로드…"
gh release download "$TAG" --repo GoodGangLabs/kemix-engine --dir "$TMP" --clobber

echo "[2/3] 체크섬 검증…"
( cd "$TMP" && sha256sum -c SHA256SUMS )

echo "[3/3] $ROOT 에 전개…"
for tar in "$TMP"/*.tgz; do
  tar xf "$tar" -C "$ROOT"
  echo "  $(basename "$tar")"
done

echo
echo "완료. 남은 것: avatar.vrm 심링크 (SETUP.md §4)"
echo "  ln -sfn ../face/animasync-face-v3/avatar/GG_11.vrm $HERE/avatar.vrm"
