#!/usr/bin/env bash

# shellcheck disable=SC1091
. "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/_lib.sh"

# Ранний выход для различных условий
itcase_is_ci && exit 0

branch="$(itcase_current_branch)"
itcase_is_release_branch "$branch" || exit 0

commit_msg=$(git log -1 --pretty=%B 2>/dev/null || echo '')
[ -z "$commit_msg" ] && exit 0

# Проверка формата коммита (major/minor/patch или release: publishing)
echo "$commit_msg" | grep -qE "^(major|minor|patch)(\([^)]+\))?:|^release: publishing" && exit 0

# Проверка наличия коммита в origin
git branch -r --contains HEAD 2>/dev/null | grep -q "origin/" && exit 0

# Проверка на автоматические merge коммиты
echo "$commit_msg" | grep -qE "^Merge (remote-tracking|made by|branch .* of (http|https|git@))" && exit 0

# Проверка merge parent в origin
if git rev-parse --verify HEAD^2 >/dev/null 2>&1; then
  merge_parent=$(git rev-parse HEAD^2 2>/dev/null)
  git branch -r --contains "$merge_parent" 2>/dev/null | grep -q . && exit 0
fi

# Если дошли сюда, нужно установить release message
export RELEASE_BRANCH=true

# Проверка на merge коммит или невалидный commitlint
if echo "$commit_msg" | grep -qE "^Merge (branch|commit|remote-tracking)|^(Merge pull request|Squash and merge|Rebase and merge)" || \
   ! echo "$commit_msg" | npx commitlint --no-edit 2>/dev/null; then
  bash "${PACKAGE_HOOKS}/set-release-message"
  exit $?
fi
