#!/usr/bin/env bash
# Install the global git hook dispatcher: point core.hooksPath at a dir of symlinks,
# one per hook name -> hook-dispatch.sh. Idempotent. Preserves per-repo hooks by
# chaining (see hook-dispatch.sh). A repo with its OWN local core.hooksPath (husky)
# overrides global and is NOT covered — that is a documented limitation.
set -euo pipefail
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DISPATCH="$SELF_DIR/hook-dispatch.sh"
HOOKS_DIR="${OD_GIT_HOOKS_DIR:-$HOME/.config/overdeck/git-hooks}"

[ -f "$DISPATCH" ] || { echo "install-global-git-hooks: dispatcher missing at $DISPATCH" >&2; exit 1; }
chmod +x "$DISPATCH"
mkdir -p "$HOOKS_DIR"

# Every client-side hook name git may invoke — symlink each so none is silently shadowed.
HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit pre-merge-commit \
prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-push \
post-rewrite pre-auto-gc"
for name in $HOOK_NAMES; do
  ln -sf "$DISPATCH" "$HOOKS_DIR/$name"
done

current="$(git config --global core.hooksPath || true)"
if [ "$current" != "$HOOKS_DIR" ]; then
  git config --global core.hooksPath "$HOOKS_DIR"
fi
echo "install-global-git-hooks: core.hooksPath=$HOOKS_DIR ($(echo $HOOK_NAMES | wc -w) hooks -> dispatch)"
