#!/usr/bin/env bash
# docs-check — valida as especificações vivas (wiki/specs).
#
# Regras (plano 02 / wiki/specs/README.md):
#   1. toda spec numerada tem cabeçalho com **Dono:**, **Status:** (valor conhecido) e **Objetivo:**
#   2. toda spec numerada está linkada no índice wiki/specs/README.md
#   3. todo link .md do índice resolve
#
# Determinístico, sem dependências externas. Sai != 0 em qualquer problema.
set -Eeuo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SPECS_DIR="$ROOT/wiki/specs"
INDEX="$SPECS_DIR/README.md"

errors=0
fail() { printf 'ERRO: %s\n' "$*" >&2; errors=$((errors + 1)); }

valid_status() {
    case "$1" in
        Proposta | Aprovada | "Em execução" | Vigente) return 0 ;;
        *) return 1 ;;
    esac
}

[ -f "$INDEX" ] || { printf 'ERRO: índice ausente: wiki/specs/README.md\n' >&2; exit 1; }

spec_count=0
for spec in "$SPECS_DIR"/[0-9]*.md; do
    [ -e "$spec" ] || continue
    spec_count=$((spec_count + 1))
    name="$(basename "$spec")"

    status="$(grep -oE '\*\*Status:\*\* *[^·|]+' "$spec" 2>/dev/null | head -1 | sed -E 's/\*\*Status:\*\* *//; s/ +$//' || true)"
    if [ -z "$status" ]; then
        fail "$name: falta o campo '**Status:**'"
    elif ! valid_status "$status"; then
        fail "$name: status inválido '$status' (use Proposta|Aprovada|Em execução|Vigente)"
    fi

    grep -qE '\*\*Dono:\*\*' "$spec" || fail "$name: falta o campo '**Dono:**'"
    grep -qE '\*\*Objetivo:\*\*' "$spec" || fail "$name: falta o campo '**Objetivo:**'"
    grep -qF "]($name)" "$INDEX" || fail "$name: não está linkada no índice wiki/specs/README.md"
done

while IFS= read -r link; do
    [ -n "$link" ] || continue
    case "$link" in http* | \#*) continue ;; esac
    [ -e "$SPECS_DIR/$link" ] || fail "índice: link quebrado -> $link"
done < <(grep -oE '\]\([^)]+\.md\)' "$INDEX" 2>/dev/null | sed -E 's/^\]\(//; s/\)$//' || true)

if [ "$errors" -gt 0 ]; then
    printf '\ndocs-check: %d problema(s) encontrado(s).\n' "$errors" >&2
    exit 1
fi

printf 'docs-check: OK — %d spec(s) com dono/status e link no índice.\n' "$spec_count"
