#!/bin/bash
# link-roles.sh — 把 TVU 通用角色 skill 软链到全局 ~/.claude/skills/
# ============================================================
# 用途: clone tvu-design-system 后, 如果你希望 `Hi 翻译` / `Hi UX` 等通用角色
#       在 **任何 cwd** (含 sibling consumer projects) 都能唤醒, 而不只是 cd 到
#       tvu-design-system 时才有, 运行此脚本一次性软链到全局个人 skills 目录.
#
# 为什么是软链而非拷贝: 真源唯一 = 仓库 skills/. 软链让 `git pull` 改了规则后
#       全局立即生效, 不产生第二份副本, 不分叉. (与 ~/.claude/vocabulary.md
#       已有的软链约定一致.)
#
# 不运行此脚本也 OK: 角色 skill 仍在仓库 skills/ 内随插件渠道分发; 此脚本只是
#       给"不装插件、想全局用"的人的轻量替代.
#
# Idempotent: 重复运行无害; 已是正确软链则跳过, 是旧拷贝/错链则替换.
# ============================================================

set -e

# 找 TVU repo root (此脚本父目录的父目录)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TVU_PATH="$(cd "$SCRIPT_DIR/.." && pwd)"

SRC_DIR="$TVU_PATH/skills"
DEST_DIR="$HOME/.claude/skills"

# 只软链通用角色 / 共享词库 (其余是项目专用工作流, 走插件渠道, 不灌全局)
SKILLS=(role-translator role-ux shared-vocab-rules)

echo "=== TVU 通用角色 → 全局 skills 软链 ==="
echo "源 (真源): $SRC_DIR"
echo "目标 (全局): $DEST_DIR"
echo ""

# Sanity check: 确认这是 TVU repo
if [ ! -d "$SRC_DIR/role-translator" ]; then
  echo "❌ Sanity check failed: $SRC_DIR 下找不到 role-translator"
  echo "   请确保 link-roles.sh 在 tvu-design-system/scripts/ 内运行"
  exit 1
fi

mkdir -p "$DEST_DIR"

for s in "${SKILLS[@]}"; do
  src="$SRC_DIR/$s"
  dest="$DEST_DIR/$s"

  if [ ! -d "$src" ]; then
    echo "⚠️  源缺失, 跳过: $src"
    continue
  fi

  # 已是指向正确源的软链 → 跳过
  if [ -L "$dest" ] && [ "$(readlink "$dest")" = "$src" ]; then
    echo "✓ 已软链, 跳过: $s"
    continue
  fi

  # 存在旧软链 / 旧拷贝 → 替换 (这就是"清理分叉源")
  if [ -e "$dest" ] || [ -L "$dest" ]; then
    rm -rf "$dest"
    echo "↻ 替换旧条目: $s"
  fi

  ln -s "$src" "$dest"
  echo "→ 已软链: $s -> $src"
done

echo ""
echo "=== 完成 ==="
echo "新开一个 Claude Code session 后, 任意目录下 'Hi 翻译' / 'Hi UX' 即可全局唤醒."
echo ""
echo "卸载: rm $DEST_DIR/{role-translator,role-ux,shared-vocab-rules}"
