#!/bin/sh
set -e

MSG_FILE=$1

if [ ! -f "$MSG_FILE" ]; then
  printf '%s\n' '提交信息文件不存在。' >&2
  exit 1
fi

FIRST_LINE=
SECOND_LINE=
HAS_BODY=
LINE_NO=0

while IFS= read -r LINE || [ -n "$LINE" ]; do
  case "$LINE" in
    \#*) continue ;;
  esac

  if [ -z "$FIRST_LINE" ]; then
    [ -n "$LINE" ] || continue
    FIRST_LINE=$LINE
    LINE_NO=1
    continue
  fi

  LINE_NO=$((LINE_NO + 1))
  case "$LINE_NO" in
    2) SECOND_LINE=$LINE ;;
    *)
      if [ -n "$LINE" ]; then
        HAS_BODY=1
      fi
      ;;
  esac
done < "$MSG_FILE"

case "$FIRST_LINE" in
  Merge*)
    exit 0
    ;;
esac

if ! printf '%s\n' "$FIRST_LINE" | grep -Eq '^(feat|fix|refactor|docs|style|test|chore): .+$'; then
  cat >&2 <<'EOF'
提交信息格式错误。

格式: <类型>: <简短描述>
类型: feat / fix / refactor / docs / style / test / chore

示例:
  feat: 添加供应商批量管理功能
  fix: 修复流式响应断连问题
  chore: 版本升迁 v0.2.0
EOF
  exit 1
fi

if [ ${#FIRST_LINE} -gt 72 ]; then
  printf '%s\n' '警告: 提交信息首行超过 72 个字符，建议保持简短。' >&2
fi

if [ -n "$HAS_BODY" ] && [ -n "$SECOND_LINE" ]; then
  printf '%s\n' '提交信息首行后应为空行，再写详细描述。' >&2
  exit 1
fi
