#!/bin/sh
# Collab git hook (installed by `collab init-hooks`).
# Runs pre-push validation first, then releases locks only on success.

PROJECT_ROOT="$(git rev-parse --show-toplevel)"
LOCK_STRICT="${LOCK_STRICT:-0}"
# git passes the push target as $1 (remote name) and $2 (URL) to pre-push.
PUSH_REMOTE="$1"

VENV_SCRIPTS="$PROJECT_ROOT/.venv/Scripts"
VENV_BIN="$PROJECT_ROOT/.venv/bin"
if [ -d "$VENV_SCRIPTS" ]; then
    PATH="$VENV_SCRIPTS:$PATH"
    export PATH
fi
if [ -d "$VENV_BIN" ]; then
    PATH="$VENV_BIN:$PATH"
    export PATH
fi

PYTHON="$PROJECT_ROOT/.venv/Scripts/python.exe"
if [ ! -x "$PYTHON" ]; then
    PYTHON="$PROJECT_ROOT/.venv/bin/python"
fi
if [ ! -x "$PYTHON" ]; then
    PYTHON="python"
fi

PRE_COMMIT_BIN="$PROJECT_ROOT/.venv/Scripts/pre-commit.exe"
if [ ! -x "$PRE_COMMIT_BIN" ]; then
    PRE_COMMIT_BIN="$PROJECT_ROOT/.venv/bin/pre-commit"
fi
if [ ! -x "$PRE_COMMIT_BIN" ]; then
    PRE_COMMIT_BIN="$(command -v pre-commit 2>/dev/null || true)"
fi

if [ -n "$PRE_COMMIT_BIN" ] && [ -x "$PRE_COMMIT_BIN" ]; then
    "$PRE_COMMIT_BIN" run --hook-stage pre-push
    VALIDATION_EXIT=$?
    if [ $VALIDATION_EXIT -ne 0 ]; then
        echo "[collab] Pre-push validation failed - keeping locks active." >&2
        exit $VALIDATION_EXIT
    fi
fi

# Verify the canonical runtime is importable before attempting to release.
if ! "$PYTHON" -c "import collab.githooks" >/dev/null 2>&1; then
    echo "[collab] Warning: collab-runtime not importable; locks were not released." >&2
    echo "[collab]   pip install collab-runtime" >&2
    if [ "$LOCK_STRICT" = "1" ]; then
        echo "[collab] LOCK_STRICT=1 -> blocking push." >&2
        exit 1
    fi
    exit 0
fi

"$PYTHON" -m collab.githooks check-overlap "$PUSH_REMOTE"
OVERLAP_EXIT=$?
# 0 = ok; 1 = overlap detected; 3 = strict check could not verify state.
# Locks are intentionally NOT released on a strict block so work stays "in progress".
if [ $OVERLAP_EXIT -eq 1 ]; then
    echo "[collab] Pre-push aborted: cross-branch overlap detected (COLLAB_OVERLAP_STRICT=1). See the guidance above." >&2
    exit $OVERLAP_EXIT
elif [ $OVERLAP_EXIT -ne 0 ]; then
    echo "[collab] Pre-push aborted: overlap check could not verify remote state under COLLAB_OVERLAP_STRICT=1 (fail-closed). See the guidance above." >&2
    exit $OVERLAP_EXIT
fi

echo "[collab] Releasing all locks after successful pre-push validation..." >&2
"$PYTHON" -m collab.githooks release-all

exit 0
