#!/bin/sh
# ATDD pre-merge-commit hook — version gate + main-merge protection.
# Installed by `atdd init`.
#
# All ATDD_SKIP_* bypass env vars have been retired (E030, 2026-05-26).
# For genuine emergencies: atdd emergency --reason "<reason>"

set -e

# --- Emergency bypass check (E031) ---
_REPO_ROOT="${ATDD_REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || echo "")}"

# --- Source-checkout live-source bridge (#928 Gap 4 Item 3) ---
# Inside the atdd toolkit source checkout, prepend src/ so the bare `python3`
# version gate AND `atdd validate` import atdd from the WORKING TREE, not the
# installed wheel. Removes the manual `PYTHONPATH=src` bridge; no-op elsewhere.
if [ -n "$_REPO_ROOT" ] && [ -d "$_REPO_ROOT/src/atdd" ] && \
   grep -q '^name = "atdd"' "$_REPO_ROOT/pyproject.toml" 2>/dev/null; then
    export PYTHONPATH="$_REPO_ROOT/src${PYTHONPATH:+:$PYTHONPATH}"
fi
if [ -n "$_REPO_ROOT" ]; then
    _BYPASS_FILE="${_REPO_ROOT}/.atdd/EMERGENCY_BYPASS"
    if [ -f "$_BYPASS_FILE" ]; then
        if find "$_BYPASS_FILE" -mmin -5 2>/dev/null | grep -q .; then
            printf "ATDD: Emergency bypass active (pre-merge-commit). Reason: %s\n" \
                "$(head -1 "$_BYPASS_FILE" 2>/dev/null | sed 's/^reason=//' || echo 'see .atdd/EMERGENCY_BYPASS')" >&2
            exit 0
        else
            printf "ATDD: Emergency bypass file found but expired (> 5 min). Ignored.\n" >&2
        fi
    fi
fi

# --- Version gate ---
python3 -c "
import sys
try:
    from atdd.version_check import _gate_main
    _gate_main()
except ImportError:
    print('ATDD: the python3 running this hook (' + sys.executable + ') cannot import atdd.', file=sys.stderr)
    print('  This is an environment/path problem, NOT a stale package: atdd is', file=sys.stderr)
    print('  likely installed in an isolated venv (pipx) that is not on the path', file=sys.stderr)
    print('  of this interpreter. Diagnose and fix:  atdd doctor', file=sys.stderr)
    sys.exit(1)
" 2>&1
if [ $? -ne 0 ]; then exit 1; fi

# --- Block merges into main/master ---
BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || echo "")

case "$BRANCH" in
    main|master) ;;
    *) exit 0 ;;
esac

# Allow: CI-only env bypass
if [ "${CI:-}" = "true" ] && [ "${ATDD_ALLOW_MAIN_MERGE:-0}" = "1" ]; then
    exit 0
fi

cat >&2 <<EOF

ATDD: Direct merges into $BRANCH are blocked.

Use a PR workflow instead of merging locally.
Work in a worktree branch:
  atdd branch <issue-number>

CI bypass (requires CI=true):
  CI=true ATDD_ALLOW_MAIN_MERGE=1 git merge ...

EOF
exit 1
