#!/usr/bin/env bash

# This script checks if the current branch name follows the specified format.
# It's designed to be used as a 'pre-commit' git hook.

# Format: <type>/<short-description>
# Example: feat/add-user-login

# --- Configuration ---
# An array of allowed commit types
ALLOWED_TYPES=(feat fix refactor perf style test docs build chore revert)
# An array of branches to ignore
IGNORED_BRANCHES=(main dev demo)

# --- Colors for Output ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# --- Helper Functions ---
error_exit() {
  echo -e "${RED}ERROR: $1${NC}" >&2
  echo -e "${YELLOW}Branch name format is incorrect. Aborting commit.${NC}" >&2
  exit 1
}

# --- Main Logic ---

# 1. Get the current branch name
BRANCH_NAME=$(git symbolic-ref --short HEAD)

# 2. Check if the current branch is in the ignored list
for ignored_branch in "${IGNORED_BRANCHES[@]}"; do
  if [ "$BRANCH_NAME" == "$ignored_branch" ]; then
    echo -e "${GREEN}Branch check skipped for default branch: $BRANCH_NAME${NC}"
    exit 0
  fi
done

# 3. Validate the overall structure: <type>/<description>
if ! [[ "$BRANCH_NAME" =~ ^[a-z]+/.+$ ]]; then
  error_exit "Branch name must be in the format: <type>/<short-description>\nExample: feat/add-user-login"
fi

# 4. Extract the type and description
TYPE=$(echo "$BRANCH_NAME" | cut -d'/' -f1)
DESCRIPTION=$(echo "$BRANCH_NAME" | cut -d'/' -f2-)

# 5. Validate the <type>
type_valid=false
for allowed_type in "${ALLOWED_TYPES[@]}"; do
  if [ "$TYPE" == "$allowed_type" ]; then
    type_valid=true
    break
  fi
done

if [ "$type_valid" == false ]; then
  error_exit "Invalid type '$TYPE'.\nAllowed types are: ${ALLOWED_TYPES[*]}"
fi

# 6. Validate the <short-description>
# Regex breakdown:
# ^[a-z0-9]+      - Starts with one or more lowercase letters/numbers (the first word).
# (-[a-z0-9]+){0,5} - Followed by a group of (dash + word) 0 to 5 times.
# $               - End of the string.
# This entire pattern enforces 1 to 6 words total, separated by dashes.
DESCRIPTION_REGEX="^[a-z0-9]+(-[a-z0-9]+){0,5}$"

if ! [[ "$DESCRIPTION" =~ $DESCRIPTION_REGEX ]]; then
  error_exit "Invalid short description '$DESCRIPTION'.\nIt must be a maximum of 6 words, all lowercase, separated by dashes.\nExample: add-new-user-authentication-feature"
fi

# If all checks pass, exit successfully
echo -e "${GREEN}Branch name '$BRANCH_NAME' is valid.${NC}"
exit 0
