#!/bin/bash
# install-claude-config.sh — Install TVU Claude Code config globally
# ============================================================
# 用途: clone tvu-design-system 后,如果你希望 Figma-to-Code 检测 hook 在
#       **任何 cwd** (含 sibling consumer projects) 都 fire, 而不只是 cd
#       到 tvu-design-system 时 fire, 运行此脚本一次性 install 到全局.
#
# 不运行此脚本也 OK: 项目级 hook 在 cwd 为 tvu-design-system 时已自动 fire.
#
# 跨设备/跨账号: 同事 clone 后运行此脚本一次,即拿到全局 hook. 整套 conventions
# / scripts / hooks / skills 全部 portable (in git).
#
# Idempotent: 重复运行无害, 自动覆盖旧 install.
# ============================================================

set -e

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

echo "=== TVU Design System — Claude Code Global Install ==="
echo "TVU repo path detected: $TVU_PATH"
echo ""

# Sanity check: 确认这是 TVU repo
if [ ! -f "$TVU_PATH/docs/internal/code-conventions.md" ]; then
  echo "❌ Sanity check failed: $TVU_PATH 不是 TVU repo (缺 docs/internal/code-conventions.md)"
  echo "   请确保 install-claude-config.sh 在 tvu-design-system/scripts/ 内运行"
  exit 1
fi

# Step 1: 创建 ~/.claude/hooks/ 目录
mkdir -p "$HOME/.claude/hooks/"

# Step 2: 复制项目 hook 到 ~/.claude/hooks/, 同时把 TVU_PATH 写到环境检测里
HOOK_SRC="$TVU_PATH/.claude/hooks/detect-figma-task.sh"
HOOK_DST="$HOME/.claude/hooks/detect-figma-task.sh"

if [ ! -f "$HOOK_SRC" ]; then
  echo "❌ Source hook 不存在: $HOOK_SRC"
  exit 1
fi

cp "$HOOK_SRC" "$HOOK_DST"
chmod +x "$HOOK_DST"
echo "✅ Hook 已复制到: $HOOK_DST"

# Step 3: 设置全局 env var (推荐放 ~/.zshrc 或 ~/.bashrc)
# 让全局 hook 始终能找到 TVU repo
SHELL_RC=""
if [ -n "$ZSH_VERSION" ] || [ "$SHELL" = "/bin/zsh" ]; then
  SHELL_RC="$HOME/.zshrc"
elif [ -n "$BASH_VERSION" ] || [ "$SHELL" = "/bin/bash" ]; then
  SHELL_RC="$HOME/.bashrc"
fi

if [ -n "$SHELL_RC" ] && [ -f "$SHELL_RC" ]; then
  if ! grep -q "TVU_DESIGN_SYSTEM_PATH" "$SHELL_RC"; then
    echo "" >> "$SHELL_RC"
    echo "# TVU Design System path (used by ~/.claude/hooks/detect-figma-task.sh)" >> "$SHELL_RC"
    echo "export TVU_DESIGN_SYSTEM_PATH=\"$TVU_PATH\"" >> "$SHELL_RC"
    echo "✅ Env var TVU_DESIGN_SYSTEM_PATH=$TVU_PATH 加到 $SHELL_RC"
    echo "   (下次开 shell 自动生效; 当前 session 可手动 source: 'source $SHELL_RC')"
  else
    echo "ℹ️  TVU_DESIGN_SYSTEM_PATH 已存在于 $SHELL_RC (skip)"
  fi
fi

# Step 4: 注册 UserPromptSubmit hook 到 ~/.claude/settings.json
# 用 Python 安全合并 (避免破坏现有 hooks)
python3 <<PYEOF
import json
import os

settings_path = os.path.expanduser('$HOME/.claude/settings.json')
hook_path = '$HOOK_DST'

try:
    with open(settings_path) as f:
        settings = json.load(f)
except FileNotFoundError:
    settings = {}

# 设置 hooks 结构
settings.setdefault('hooks', {})
settings['hooks'].setdefault('UserPromptSubmit', [])

# 移除任何 detect-figma-task 相关旧 entries (避免 duplicate)
filtered = []
for h in settings['hooks']['UserPromptSubmit']:
    if isinstance(h, dict) and 'hooks' in h:
        cmd = h['hooks'][0].get('command', '') if h['hooks'] else ''
        if 'detect-figma-task' not in cmd:
            filtered.append(h)
    else:
        filtered.append(h)

# 加新 entry
filtered.append({
    'hooks': [{
        'type': 'command',
        'command': hook_path
    }]
})
settings['hooks']['UserPromptSubmit'] = filtered

with open(settings_path, 'w') as f:
    json.dump(settings, f, indent=2, ensure_ascii=False)

print(f'✅ Hook 注册到: {settings_path}')
print(f'   UserPromptSubmit entries: {len(filtered)}')
PYEOF

echo ""
echo "=== Install 完成 ==="
echo "现在在任何 Claude Code session (含 sibling consumer projects),"
echo "用户粘 Figma URL + Code/还原 关键词时, hook 自动 fire."
echo ""
echo "Verify:"
echo "  echo 'https://figma.com/design/abc 还原成 Code' | $HOOK_DST"
echo "(应该输出 systemMessage JSON)"
echo ""
echo "If you don't want global install, uninstall by:"
echo "  rm $HOOK_DST"
echo "  # Manually remove UserPromptSubmit entry from ~/.claude/settings.json"
