#!/usr/bin/env bash
# scripts/install-git-hook.sh
# Usage: ./scripts/install-git-hook.sh <repo-path>
# Installs post-commit + post-receive hooks that POST to PM webhook.

set -euo pipefail

REPO="${1:-}"
if [[ -z "$REPO" || ! -d "$REPO/.git" ]]; then
  echo "Usage: $0 <repo-path-with-.git>"
  exit 1
fi

PM_URL="${PM_URL:-http://192.168.40.20:3000}"
TOKEN="${PM_WEBHOOK_TOKEN:-}"
if [[ -z "$TOKEN" ]]; then
  echo "ERROR: PM_WEBHOOK_TOKEN required" >&2
  exit 1
fi

HOOK_BODY=$(cat <<'OUTER'
#!/usr/bin/env bash
# Project-Manager webhook (auto-generated)
PM_URL="__PM_URL__"
TOKEN="__TOKEN__"
NAME="$(basename "$(git rev-parse --show-toplevel)")"
HASH="$(git rev-parse HEAD)"
MSG="$(git log -1 --pretty=%s 2>/dev/null | head -c 200 | tr -d '"\\')"
BRANCH="$(git branch --show-current 2>/dev/null)"
AUTHOR="$(git log -1 --pretty=%an 2>/dev/null | tr -d '"\\')"
PAYLOAD=$(printf '{"project":"%s","hash":"%s","message":"%s","branch":"%s","author":"%s"}' \
  "$NAME" "$HASH" "$MSG" "$BRANCH" "$AUTHOR")
curl -s -m 5 -X POST "$PM_URL/api/webhook/git" \
  -H "Content-Type: application/json" \
  -H "X-PM-Token: $TOKEN" \
  -d "$PAYLOAD" >/dev/null 2>&1 || true
OUTER
)

# substitute placeholders
HOOK_BODY="${HOOK_BODY//__PM_URL__/$PM_URL}"
HOOK_BODY="${HOOK_BODY//__TOKEN__/$TOKEN}"

for HOOK in post-commit post-receive; do
  HOOK_PATH="$REPO/.git/hooks/$HOOK"
  printf '%s\n' "$HOOK_BODY" > "$HOOK_PATH"
  chmod +x "$HOOK_PATH"
  echo "installed: $HOOK_PATH"
done

echo "Done. Test: cd $REPO && git commit --allow-empty -m 'hook test'"
