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

root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
guard="${root}/guardrails/repository/no-vague-extension-names.sh"
fixture="$(mktemp -d)"
trap 'rm -rf "${fixture}"' EXIT

expect_failure() {
  local label="$1"
  if AGENTTEAM_EXTENSION_NAMING_GUARD_ROOT="${fixture}" bash "${guard}" >/dev/null 2>&1; then
    echo "expected ${label} fixture to fail" >&2
    exit 1
  fi
}

mkdir -p \
  "${fixture}/internal/extension" \
  "${fixture}/internal/service/extensionflow" \
  "${fixture}/internal/api/extension" \
  "${fixture}/internal/extension/spec" \
  "${fixture}/desktop/internal/api/exec" \
  "${fixture}/desktop/internal/api/extension" \
  "${fixture}/desktop/integration/extensione2e" \
  "${fixture}/specs/extension"
AGENTTEAM_EXTENSION_NAMING_GUARD_ROOT="${fixture}" bash "${guard}" >/dev/null

printf 'package extension\nvar _ = struct { DomainAlias string `json:"alias"` }{}\n' \
  >"${fixture}/internal/api/extension/stale.go"
expect_failure "retired Extension alias"
rm "${fixture}/internal/api/extension/stale.go"

printf 'package extension\nfunc canonicalValue() {}\n' \
  >"${fixture}/internal/extension/spec/stale.go"
expect_failure "vague canonical helper"
rm "${fixture}/internal/extension/spec/stale.go"

printf 'package extension\n' \
  >"${fixture}/internal/extension/canonical.go"
expect_failure "vague canonical filename"
rm "${fixture}/internal/extension/canonical.go"

printf 'package exec\n// surface is intentionally too vague here.\n' \
  >"${fixture}/desktop/internal/api/exec/stale.go"
expect_failure "retired Desktop Exec surface terminology"
rm "${fixture}/desktop/internal/api/exec/stale.go"

mkdir -p "${fixture}/internal/extension/builtinproviders"
expect_failure "retired Builtin provider package"
rm -rf "${fixture}/internal/extension/builtinproviders"

mkdir -p "${fixture}/internal/service/searchengine"
expect_failure "retired search network service package"

echo "Extension naming guard tests passed."
