#!/usr/bin/env bash
# PreToolUse(Write) — 새 컴포넌트 파일 생성 순간 FSD 배치 판단 강제 (슬라이스 단위 deny-once).
#
# 왜: rule/스킬은 "읽으면" 효과가 있지만 새 파일 생성 시점엔 아무것도 로드돼 있지
# 않을 수 있다. 슬라이스의 첫 생성 시도를 1회 거부해 feature-sliced-design 스킬을
# 읽게 만들고, 마커를 유지해 같은 슬라이스의 후속 파일은 재차단하지 않는다 —
# 배치 판단은 파일이 아니라 슬라이스 단위 결정이라, 파일마다 거부하면 같은 내용
# 재전송만 강제하는 순수 마찰이 된다(실측: 한 기능 6파일에 재시도 6회).
# 실패 시 조용히 통과(fail-open).

set -u
input=$(cat 2>/dev/null || true)
fp=$(printf '%s' "$input" | node "$(dirname "$0")/read-json-field.mjs" tool_input.file_path 2>/dev/null || true)
[ -n "$fp" ] || exit 0

# 대상: src/**/*.tsx 신규 생성만. 생성물·shadcn·테스트·픽스처는 제외.
case "$fp" in
  */src/*.tsx) ;;
  *) exit 0 ;;
esac
case "$fp" in
  */shared/ui/*|*/_generated/*|*.spec.*|*.test.*|*_gate-selftest*) exit 0 ;;
esac
[ -e "$fp" ] && exit 0   # 기존 파일 수정은 통과

gitdir=$(git rev-parse --git-dir 2>/dev/null) || exit 0
markerdir="$gitdir/harness-guards"
mkdir -p "$markerdir" 2>/dev/null || exit 0

# 마커 키 = 레이어/슬라이스 (예: pages/crm-posts). 패턴 미매치면 sed가 경로를
# 그대로 남겨 파일 단위 폴백이 된다 (src 직하 파일 등).
slice=$(printf '%s' "$fp" | sed -E 's|.*/src/([^/]+/[^/]+)/.*|\1|')
marker="$markerdir/ncg-$(printf '%s' "$slice" | cksum | cut -d' ' -f1)"

[ -f "$marker" ] && exit 0   # 이 슬라이스는 배치 판단을 이미 통과 — 마커는 유지

touch "$marker" 2>/dev/null || exit 0
printf '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"이 슬라이스의 첫 화면/컴포넌트 파일입니다. 만들기 전에 배치 판단 먼저: feature-sliced-design 스킬(pages-first, 승격 조건)과 fsd-router 스킬을 읽고, 이 파일이 그 기준에 맞는 위치인지 확인하세요. 확인했다면 같은 경로로 다시 시도하면 통과되고, 같은 슬라이스의 후속 파일은 다시 묻지 않습니다."}}\n'
exit 0
