#!/bin/sh
# Тег релізу (v*) іде на GitHub лише після tools/release_check.py, а main —
# лише після ruff і mypy.
#
# Ворота в release.yml ловлять те саме, але вже ПІСЛЯ пушу тега — і тоді
# тег доводиться знімати й ставити наново. Тут відмова до того, як тег
# кудись поїхав. Обійти свідомо: git push --no-verify.
#
# Увімкнути на машині (раз):  git config core.hooksPath .githooks

zero=0000000000000000000000000000000000000000
rc=0
# Python, який справді запускається: на Windows `python` буває заглушкою
# Microsoft Store, що лише відкриває магазин і виходить з помилкою.
py=""
for c in python3 python py; do
  if command -v "$c" >/dev/null 2>&1 && "$c" -c "import sys" >/dev/null 2>&1; then
    py=$c
    break
  fi
done

# Інтерпретатор середовища розробки — прямо, не через `uv run`: той
# синхронізує середовище, а поки живий наглядач хмари, це його ламає.
venv=""
for c in .venv/Scripts/python.exe .venv/bin/python; do
  [ -x "$c" ] && { venv=$c; break; }
done

while read -r local_ref local_sha remote_ref remote_sha; do
  case "$remote_ref" in
    refs/heads/main)
      [ "$local_sha" = "$zero" ] && continue
      # ruff і mypy локально тестів не мають: pytest на Windows зелений, а
      # CI на GitHub два дні стояв червоним через mypy (жовтень 2026).
      if [ -z "$venv" ]; then
        echo "pre-push: немає .venv — ruff і mypy не перевірено (CI перевірить)" >&2
        continue
      fi
      echo "ruff і mypy перед пушем main…"
      "$venv" -m ruff check . --quiet || rc=1
      "$venv" -m mypy --no-error-summary || rc=1
      # На Windows mypy не бачить гілок під Linux (`ctypes.windll` поза
      # `sys.platform == "win32"` — червоний CI 23.10.2026), тож і так.
      case "$venv" in
        *.exe) "$venv" -m mypy --platform linux --no-error-summary || rc=1 ;;
      esac
      ;;
    refs/tags/v*)
      [ "$local_sha" = "$zero" ] && continue   # тег видаляють — перевіряти нічого
      tag=${remote_ref#refs/tags/}
      if [ -z "$py" ]; then
        echo "перевірка релізу $tag: не знайдено робочого Python (python3/python/py) —" \
             "поставте його в PATH або свідомо: git push --no-verify" >&2
        rc=1
        continue
      fi
      echo "перевірка релізу $tag…"
      "$py" tools/release_check.py "$tag" --ref "$local_sha" --quiet || rc=1
      ;;
  esac
done

[ $rc -ne 0 ] && echo "не запушено. Виправити (і переставити тег, якщо це реліз), або свідомо: git push --no-verify" >&2
exit $rc
