#!/usr/bin/env bash
set -euo pipefail

root="${AGENTTEAM_EXTENSION_NAMING_GUARD_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)}"

failures=()
for retired_path in \
  "desktop/internal/api/exec/surface_store.go" \
  "desktop/internal/api/exec/surface_store_test.go" \
  "desktop/internal/api/extension/surface_store.go" \
  "internal/extension/builtinproviders" \
  "internal/service/arxiv" \
  "internal/service/searchengine"; do
  if [[ -e "${root}/${retired_path}" ]]; then
    failures+=("${retired_path}: retired Extension name or package must not exist")
  fi
done

canonical_files="$(
  find \
    "${root}/internal/extension" \
    "${root}/internal/service/extensionflow" \
    "${root}/internal/api/extension" \
    "${root}/internal/extension/spec" \
    -type f -name 'canonical.go' -print 2>/dev/null || true
)"
if [[ -n "${canonical_files}" ]]; then
  failures+=("vague Extension canonical.go filenames remain:
${canonical_files}")
fi

vague_symbols="$(
  rg -n \
    -e '\b[[:alnum:]_]*Aliases?\b' \
    -e 'json:"alias"' \
    -e ':alias\b' \
    -e '<alias>' \
    -e '^type[[:space:]]+canonical' \
    -e '^func[[:space:]]+(\([^)]*\)[[:space:]]+)?canonical' \
    "${root}/internal/extension" \
    "${root}/internal/service/extensionflow" \
    "${root}/internal/api/extension" \
    "${root}/internal/extension/spec" \
    "${root}/desktop/integration/extensione2e" \
    "${root}/specs/extension" \
    2>/dev/null || true
)"
if [[ -n "${vague_symbols}" ]]; then
  failures+=("vague Extension routing or deterministic-encoding names remain:
${vague_symbols}")
fi

vague_runtime_symbols="$(
  rg -n \
    -e '\bsurfaces?\b' \
    -e '\bSurfaceStore\b' \
    -e '\bSurfaceConfig\b' \
    -e '\bSurfaceLease\b' \
    -e '\bsurfaceRecord\b' \
    -e '\bsurfaceAuthorizer\b' \
    "${root}/desktop/internal/api/exec" \
    "${root}/desktop/integration/extensione2e" \
    2>/dev/null || true
)"
if [[ -n "${vague_runtime_symbols}" ]]; then
  failures+=("retired Desktop Exec/Extension surface terminology remains:
${vague_runtime_symbols}")
fi

builtin_provider_refs="$(
  rg -n -F \
    -e "internal/extension/builtinproviders" \
    --glob '!docs/superpowers/**' \
    --glob '!**/guardrails/repository/no-vague-extension-names.sh' \
    --glob '!**/guardrails/repository/no-vague-extension-names-test.sh' \
    "${root}" 2>/dev/null || true
)"
if [[ -n "${builtin_provider_refs}" ]]; then
  failures+=("retired Builtin provider package remains referenced:
${builtin_provider_refs}")
fi

if (( ${#failures[@]} > 0 )); then
  printf 'Extension naming guard failed:\n' >&2
  printf -- '- %s\n' "${failures[@]}" >&2
  exit 1
fi

echo "Extension naming guard passed."
