#!/usr/bin/env sh
#
# tools/project-name.sh — resolve o nome do projeto Docker Compose de forma SEGURA.
#
# Fonte (ordem): $COMPOSE_PROJECT_NAME → `.env` (COMPOSE_PROJECT_NAME) → APP_NAME → `publicv7`.
# Por padrão é o **slug do APP_NAME** (nome do projeto/tenant):
#   "Prefeitura de Santa Barra" → prefeitura-santa-barra
#   "Câmara Municipal de São Paulo" → camara-municipal-sao-paulo
# Sempre devolve um nome válido para o Compose: `[a-z0-9][a-z0-9_-]*`.
# Espaços/acentos/símbolos viram `-`; conectivos PT (de/da/do/e/…) são removidos.
# Se o valor for alterado, avisa em stderr (nunca usa valor inválido).
#
# Uso: PROJECT_NAME="$(tools/project-name.sh)"
set -eu

ROOT="$(cd "$(dirname "$0")/.." && pwd)"

env_value() {
    [ -f "$ROOT/.env" ] || return 0
    grep -E "^$1=" "$ROOT/.env" | head -1 | cut -d= -f2- \
        | sed -E 's/^"(.*)"$/\1/; s/^'"'"'(.*)'"'"'$/\1/' || true
}

raw="${COMPOSE_PROJECT_NAME:-}"
[ -n "$raw" ] || raw="$(env_value COMPOSE_PROJECT_NAME)"
[ -n "$raw" ] || raw="$(env_value APP_NAME)"
[ -n "$raw" ] || raw="publicv7"

# Translitera acentos (São → Sao) quando `iconv` existir.
raw_ascii="$(printf '%s' "$raw" | iconv -f UTF-8 -t ASCII//TRANSLIT 2>/dev/null || printf '%s' "$raw")"

# Normaliza: minúsculas; [^a-z0-9_-] → '-'; sem '-' nas pontas; sem repetidos.
normalized="$(printf '%s' "$raw_ascii" \
    | tr '[:upper:]' '[:lower:]' \
    | sed -E 's/[^a-z0-9_-]+/-/g; s/^-+//; s/-+$//; s/-{2,}/-/g')"

# Remove conectivos PT ("Prefeitura de Santa Barra" → "prefeitura-santa-barra").
name="$(printf '%s' "$normalized" | awk -F- '{
    out = "";
    for (i = 1; i <= NF; i++) {
        if ($i == "" || $i ~ /^(a|o|as|os|de|da|do|das|dos|e|em|no|na|nos|nas)$/) continue;
        out = (out == "" ? $i : out "-" $i);
    }
    print out;
}')"

# Compose exige começar com [a-z0-9].
case "$name" in
    [a-z0-9]*) : ;;
    *) name="p-${name}" ;;
esac

[ -n "$name" ] || name="publicv7"

if [ "$name" != "$raw" ]; then
    printf '[project-name] "%s" normalizado para "%s"\n' "$raw" "$name" >&2
fi

printf '%s\n' "$name"
