#!/usr/bin/env bash
# Valida mensagens no padrão iuricode/padroes-de-commits + Conventional Commits.
# https://github.com/iuricode/padroes-de-commits

COMMIT_MSG_FILE=$1
COMMIT_MSG=$(head -n 1 "$COMMIT_MSG_FILE")

# Commits automáticos do Git (merge, revert, etc.)
if [[ $COMMIT_MSG =~ ^(Merge|Revert|fixup!|squash!) ]]; then
  exit 0
fi

# :emoji: type(scope)?: descrição
CONVENTIONAL_COMMIT_REGEX='^(:[a-z0-9_+-]+:\s)?(feat|fix|docs|style|refactor|test|chore|build|ci|perf|revert|raw|cleanup|remove)(\([a-zA-Z0-9_.-]+\))?(!)?: .+$'

if ! [[ $COMMIT_MSG =~ $CONVENTIONAL_COMMIT_REGEX ]]; then
  echo "ERRO: mensagem de commit fora do padrao do projeto."
  echo
  echo "Formato obrigatorio:"
  echo "  :emoji: tipo: Descricao curta"
  echo "  tipo: Descricao curta"
  echo
  echo "Exemplos:"
  echo "  :sparkles: feat: Pagina de login"
  echo "  :bug: fix: Loop infinito na linha 50"
  echo "  :books: docs: Atualizacao do README"
  echo "  :recycle: refactor(cli): Simplificar fluxo do run"
  echo
  echo "Tipos: feat, fix, docs, test, build, perf, style, refactor, chore, ci, raw, cleanup, remove, revert"
  echo "Guia: docs/COMMITS.md"
  exit 1
fi

exit 0
