#!/bin/bash
#
# Este script automatiza a instalação e configuração do Husky e Commitlint
# no projeto onde ele é executado.
#
# Uso: O usuário final executará 'setup-commitlint-husky' na raiz do seu projeto.
#

echo "Iniciando a automação de instalação e configuração do Commitlint com Husky..."

# Passo 1: Instalar Husky e Commitlint como devDependencies no projeto do usuário
echo "Instalando husky, @commitlint/cli e @commitlint/config-conventional como dependências de desenvolvimento..."
npm install -D husky @commitlint/cli @commitlint/config-conventional
if [ $? -ne 0 ]; then
  echo "Erro: Falha ao instalar as dependências. Verifique sua conexão com a internet e as permissões."
  exit 1
fi
echo "Dependências instaladas com sucesso."

# Passo 2: Verificar e inicializar o diretório .husky.
# Isso garante que a base do Husky esteja pronta para receber os hooks.
if [ ! -d ".husky" ]; then
  echo "Diretório .husky não encontrado. Executando 'npx husky install' para inicializá-lo..."
  npx husky install
  if [ $? -ne 0 ]; then
    echo "Erro: Falha ao inicializar o Husky. Certifique-se de que 'husky' está configurado corretamente."
    exit 1
  fi
  echo "Husky inicializado com sucesso."
fi

# Passo 3: Adicionar o conteúdo do hook 'commit-msg' ao arquivo .husky/commit-msg.
# Este hook garantirá que o Commitlint seja executado antes de cada commit.
echo "Configurando o hook 'commit-msg' para o Commitlint..."
echo 'npx --no-install commitlint --edit "${1}"' > .husky/commit-msg

# Passo 4: Tornar o arquivo do hook executável.
# Permissões de execução são essenciais para que o Git possa disparar o script.
chmod +x .husky/commit-msg

echo "Configuração do Commitlint com Husky concluída com sucesso!"
echo "Agora, seus commits serão validados automaticamente."
echo "Você pode testar com: git commit -m 'feat: minha primeira mensagem padronizada'"