#!/usr/bin/env bash
# =============================================================================
# llm-config.sh — LLM API key 本地配置备份 / 恢复工具
#
# 背景:
#   LLM API key(DeepSeek 等)属于敏感信息,**不得提交到 git**。
#   代码已改为从本地 gitignored 配置文件读取;本脚本负责这些配置的备份与恢复。
#
# 用法:
#   ./llm-config.sh backup    备份本地 LLM 配置文件到 llm-backup/
#   ./llm-config.sh restore   从 llm-backup/ 恢复本地 LLM 配置文件
#
# 覆盖的本地配置文件(均已 gitignore,勿提交):
#   - ai-agent/entry/src/main/ets/pages/local-config.ts        (OHOS demo 页面)
#   - toolkit/ascf-toolkit/local-llm-config.json               (ascf-toolkit)
#   - demos/android-demo/local.properties                      (Android demo, llm.apiKey)
# =============================================================================
set -euo pipefail

REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKUP_DIR="$REPO_ROOT/llm-backup"

FILES=(
  "ai-agent/entry/src/main/ets/pages/local-config.ts"
  "toolkit/ascf-toolkit/local-llm-config.json"
  "demos/android-demo/local.properties"
)

die() {
  echo "错误: $*" >&2
  exit 1
}

cmd_backup() {
  mkdir -p "$BACKUP_DIR"
  local n=0
  for rel in "${FILES[@]}"; do
    local src="$REPO_ROOT/$rel"
    if [ -f "$src" ]; then
      mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
      cp "$src" "$BACKUP_DIR/$rel"
      echo "已备份: $rel"
      n=$((n + 1))
    else
      echo "[警告] 本地不存在,跳过: $rel"
    fi
  done
  echo "==> 备份完成 -> $BACKUP_DIR(已 gitignore,勿提交)"
}

cmd_restore() {
  [ -d "$BACKUP_DIR" ] || die "备份不存在: $BACKUP_DIR(请先 ./llm-config.sh backup,或从 zip 解压)"
  local n=0
  for rel in "${FILES[@]}"; do
    local src="$BACKUP_DIR/$rel"
    if [ -f "$src" ]; then
      mkdir -p "$REPO_ROOT/$(dirname "$rel")"
      cp "$src" "$REPO_ROOT/$rel"
      echo "已恢复: $rel"
      n=$((n + 1))
    else
      echo "[警告] 备份中没有此文件,跳过: $rel"
    fi
  done
  echo "==> 恢复完成。这些文件已 gitignore,请勿提交(见 CLAUDE.md)"
}

case "${1:-}" in
  backup) cmd_backup ;;
  restore) cmd_restore ;;
  *) echo "用法: $0 {backup|restore}" >&2; exit 1 ;;
esac