#!/bin/bash
# UserPromptSubmit hook: 检测 prompt 含 Figma URL + Code/还原 关键词
# → 自动注入 TVU conventions 提示, 让 AI 不能 skip 起手协议
#
# 项目级 hook (in tvu-design-system/.claude/hooks/) — portable for cross-account /
# cross-device / cross-clone use. Run scripts/install-claude-config.sh to also
# install globally for cross-project (sibling consumer products) use.
#
# 真源: tvu-design-system/docs/internal/code-conventions.md R7-R10 + R12
#      tvu-design-system/docs/meta-rules.md 触发器 K, L
# 实证: 2026-05-13 retrospection (Config-T 反复绕弯 → systematic 防护)

# === Detect TVU repo path (portable) ===
# Priority: env var > Claude Code env > script-location walkup
if [ -n "$TVU_DESIGN_SYSTEM_PATH" ]; then
  TVU_PATH="$TVU_DESIGN_SYSTEM_PATH"
elif [ -n "$CLAUDE_PROJECT_DIR" ] && [ -f "$CLAUDE_PROJECT_DIR/docs/internal/code-conventions.md" ]; then
  TVU_PATH="$CLAUDE_PROJECT_DIR"
else
  # Walk up from this script's location: .claude/hooks/X.sh → repo root
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
  if [ -n "$SCRIPT_DIR" ] && [ -f "$SCRIPT_DIR/../../docs/internal/code-conventions.md" ]; then
    TVU_PATH="$(cd "$SCRIPT_DIR/../.." && pwd)"
  else
    TVU_PATH=""
  fi
fi

# === Read user's prompt from stdin ===
prompt=$(cat)

# === Detect trigger condition: Figma URL + Code/还原 keyword ===
if echo "$prompt" | grep -qE "figma\.com/(design|file)/" && \
   echo "$prompt" | grep -qiE "(还原|实现|翻译|生成|做出|画出|code|html|vue|react|component|页面|mockup)"; then

  # Build path references (with fallback placeholder if TVU repo not located)
  if [ -n "$TVU_PATH" ]; then
    CONV="$TVU_PATH/docs/internal/code-conventions.md"
    META="$TVU_PATH/docs/meta-rules.md"
    EXTRACT="$TVU_PATH/scripts/figma-extract-css.py"
    FETCH="$TVU_PATH/scripts/figma-asset-fetch.py"
    DIFF="$TVU_PATH/scripts/visual-diff.py"
  else
    CONV="<TVU_REPO>/docs/internal/code-conventions.md"
    META="<TVU_REPO>/docs/meta-rules.md"
    EXTRACT="<TVU_REPO>/scripts/figma-extract-css.py"
    FETCH="<TVU_REPO>/scripts/figma-asset-fetch.py"
    DIFF="<TVU_REPO>/scripts/visual-diff.py"
  fi

  # Output JSON systemMessage (bash heredoc with $ expansion for paths)
  cat <<JSON
{"systemMessage": "🚨 检测到 Figma URL + Code/还原 关键词 → TVU Figma-to-Code 任务\n\n强制起手协议 (不可 skip):\n1. invoke tvu-design-code skill (Skill 工具)\n2. Read $CONV (R7-R10 + R12 + 规则适用速查表)\n3. Read $META (触发器 K, L)\n4. **(新工具,必须先跑)** python3 $EXTRACT 取数据驱动 CSS baseline (禁止估算 layout values; 全部 from Figma metadata)\n\nR7 4 大场景 (起手 classify + 显式声明):\n- 场景 1: 非 TVU 视觉还原 (pre-design-system / 客户 Figma)\n- 场景 2: 已有产品增量\n- 场景 3: 全新产品 TVU 构建\n- 场景 4: TVU 规范校正\n声明格式: intent classified as 场景 X.Y (reason: ...)\n\n禁止行为 (高频翻车点):\n- 不准 approximate 重画 vector (R8) → 用 $FETCH 取真 SVG\n- 不准从下游 React code 反推决策 (R10) → 先看 Figma node data-name (Logo/X = 单一 SVG 强 signal)\n- 不准自作主张 ambiguous case (Meta-L) → 必 ask + 列举疑问点\n- 不准 auto-commit 视觉文件 (Hook A) → 需 VISUAL_COMMIT_APPROVED=1 显式 override\n- 不准估算 layout values (padding/margin/font-size 等) → 必 run figma-extract-css.py 取精确数值\n- 不准把 Figma annotation (虚线框 / 浮于布局外 / _annotation/ 命名) 渲染为 UI → figma-extract-css.py 自动 filter, AI 必须 review annotation-filtered.md\n\n交付前自检 (R8 v2 L3): Chrome headless screenshot + $DIFF 客观 diff% vs Figma truth, threshold 内才交付. 不许凭主观判断 release.\n\n详细规则: https://github.com/NancyZeng0210/TVU-Design-System"}
JSON
fi
