#!/bin/bash
# PreToolUse schema completeness gate for newsletter issue files.
# Blocks Write of an issue file missing required schema fields.

set -euo pipefail

INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
TOOL=$(echo "$INPUT" | jq -r '.tool_name // empty')

[ -z "$FILE_PATH" ] && exit 0

case "$FILE_PATH" in
  */newsletter/issues/*.md) ;;
  *) exit 0 ;;
esac

[ "$TOOL" = "Write" ] || exit 0

CONTENT=$(echo "$INPUT" | jq -r '.tool_input.content // empty')
[ -z "$CONTENT" ] && exit 0

REQUIRED_FRONTMATTER=$(printf 'issue\ndate\nsubject\npreview\ntype\n')
REQUIRED_SECTIONS=$(printf 'TIP_HEADLINE\nTLDR\nTIP_INTRO\nTIP_BODY\nDEEP_DIVE_TITLE\nDEEP_DIVE_URL\nDEEP_DIVE_DESCRIPTION\nPROMPT\nPRO_TIP_HEADLINE\nPRO_TIP_BODY\nQUICK_WIN_HEADLINE\nQUICK_WIN_BODY\nREAD_THIS_WEEK\nNEXT_TEASE\n')

MISSING=""

FRONTMATTER=$(echo "$CONTENT" | awk '/^---[[:space:]]*$/{c++; next} c==1{print} c==2{exit}')

while IFS= read -r KEY; do
  [ -z "$KEY" ] && continue
  if ! echo "$FRONTMATTER" | grep -qE "^${KEY}:"; then
    MISSING="${MISSING}- frontmatter key missing: ${KEY}\n"
  fi
done <<< "$REQUIRED_FRONTMATTER"

while IFS= read -r SECTION; do
  [ -z "$SECTION" ] && continue
  if ! echo "$CONTENT" | grep -qE "^## ${SECTION}[[:space:]]*$"; then
    MISSING="${MISSING}- section missing: ## ${SECTION}\n"
  fi
done <<< "$REQUIRED_SECTIONS"

if [ -n "$MISSING" ]; then
  REASON=$(printf "%b" "$MISSING")
  jq -n \
    --arg file "$FILE_PATH" \
    --arg reason "$REASON" \
    '{
      hookSpecificOutput: {
        hookEventName: "PreToolUse",
        permissionDecision: "deny",
        permissionDecisionReason: ("NEWSLETTER SCHEMA GATE: missing required fields. File: " + $file),
        additionalContext: ("The following are required by ISSUE-SCHEMA.md but were not found:\n" + $reason + "\nSee ISSUE-SCHEMA.md for field definitions.")
      }
    }'
  exit 0
fi

exit 0
