#!/usr/bin/env bash
set -euo pipefail

# Check project conformance to starter-kit documentation standards.
# Usage:
#   ./starter-kit/check-conformance.sh /absolute/path/to/project

if [[ $# -ne 1 ]]; then
  echo "Usage: $0 /absolute/path/to/project"
  exit 1
fi

TARGET_DIR="$1"

if [[ ! -d "$TARGET_DIR" ]]; then
  echo "Target directory does not exist: $TARGET_DIR"
  exit 1
fi

PASS=0
FAIL=0

ok() {
  PASS=$((PASS + 1))
  echo "PASS  $1"
}

bad() {
  FAIL=$((FAIL + 1))
  echo "FAIL  $1"
}

must_exist=(
  "$TARGET_DIR/CONTRIBUTING.md"
  "$TARGET_DIR/SECURITY.md"
  "$TARGET_DIR/docs.html"
  "$TARGET_DIR/docs/REQUIREMENTS.md"
  "$TARGET_DIR/docs/ARCHITECTURE.md"
  "$TARGET_DIR/docs/USER_GUIDE.md"
  "$TARGET_DIR/docs/PROGRAMMER_GUIDE.md"
  "$TARGET_DIR/docs/FUNCTION_DEFINITIONS.md"
  "$TARGET_DIR/docs/IMPROVEMENT_RECOMMENDATIONS.md"
  "$TARGET_DIR/docs/TASKS.md"
  "$TARGET_DIR/docs/CODING_STANDARDS.md"
  "$TARGET_DIR/docs/RUNTIME_ERROR_AND_DEBUG_POLICY.md"
  "$TARGET_DIR/docs/TESTING_RULES.md"
  "$TARGET_DIR/docs/WORKING_ENVIRONMENT.md"
  "$TARGET_DIR/docs/PROJECT_GOVERNANCE.md"
  "$TARGET_DIR/docs/DOCS_INDEX.md"
)

for f in "${must_exist[@]}"; do
  if [[ -f "$f" ]]; then
    ok "exists: $f"
  else
    bad "missing: $f"
  fi
done

check_heading() {
  local file="$1"
  local pattern="$2"
  local label="$3"

  if [[ ! -f "$file" ]]; then
    bad "$label (file missing)"
    return
  fi

  if grep -Eq "$pattern" "$file"; then
    ok "$label"
  else
    bad "$label"
  fi
}

# Enforce sign-off style for process docs.
check_heading "$TARGET_DIR/CONTRIBUTING.md" '^## Must' 'contributing has Must section'
check_heading "$TARGET_DIR/CONTRIBUTING.md" '^## Sign-Off Record' 'contributing has Sign-Off Record'
check_heading "$TARGET_DIR/SECURITY.md" '^## Must' 'security has Must section'
check_heading "$TARGET_DIR/SECURITY.md" '^## Sign-Off Record' 'security has Sign-Off Record'
check_heading "$TARGET_DIR/docs/REQUIREMENTS.md" '^## Must' 'requirements has Must section'
check_heading "$TARGET_DIR/docs/TESTING_RULES.md" '^## Must' 'testing has Must section'
check_heading "$TARGET_DIR/docs/PROJECT_GOVERNANCE.md" '^## Must' 'governance has Must section'
check_heading "$TARGET_DIR/docs/CODING_STANDARDS.md" '^## Must' 'coding standards has Must section'
check_heading "$TARGET_DIR/docs/CODING_STANDARDS.md" '^## Sign-Off Record' 'coding standards has Sign-Off Record'
check_heading "$TARGET_DIR/docs/RUNTIME_ERROR_AND_DEBUG_POLICY.md" '^## Must' 'runtime policy has Must section'
check_heading "$TARGET_DIR/docs/RUNTIME_ERROR_AND_DEBUG_POLICY.md" '^## Runtime Modes' 'runtime policy has Runtime Modes section'
check_heading "$TARGET_DIR/docs/RUNTIME_ERROR_AND_DEBUG_POLICY.md" '^## Sign-Off Record' 'runtime policy has Sign-Off Record'

# Basic root policy placement check.
if [[ -f "$TARGET_DIR/CONTRIBUTING.md" && -f "$TARGET_DIR/SECURITY.md" ]]; then
  ok "root policy docs in expected location"
else
  bad "root policy docs in expected location"
fi

echo
echo "Summary: PASS=$PASS FAIL=$FAIL"

if [[ $FAIL -gt 0 ]]; then
  exit 2
fi

exit 0
