package catalogadmissionfence

import (
	"os"
	"path/filepath"
	"runtime"
	"strings"
	"testing"
)

func TestAdmissionFenceHasOnlySourcePreparationIdentityWriterAndInspectionConsumers(t *testing.T) {
	_, file, _, ok := runtime.Caller(0)
	if !ok {
		t.Fatal("resolve boundary test")
	}
	repoRoot := filepath.Clean(filepath.Join(filepath.Dir(file), "..", ".."))
	allowed := map[string]struct{}{
		filepath.Join(repoRoot, "catalogpublication", "source_admission.go"):          {},
		filepath.Join(repoRoot, "catalogapp", "registry.go"):                          {},
		filepath.Join(repoRoot, "catalogapp", "operations.go"):                        {},
		filepath.Join(repoRoot, "catalogapp", "migration.go"):                         {},
		filepath.Join(repoRoot, "catalogapp", "namespace_declaration_observation.go"): {},
		filepath.Join(repoRoot, "catalogapp", "publisher_trust_transition.go"):        {},
		filepath.Join(repoRoot, "catalogtenant", "store.go"):                          {},
	}
	const importPath = "nexuscrm-controlplane/internal/catalogadmissionfence"
	err := filepath.WalkDir(repoRoot, func(
		path string,
		entry os.DirEntry,
		walkErr error,
	) error {
		if walkErr != nil {
			return walkErr
		}
		if entry.IsDir() {
			if path != repoRoot && strings.HasPrefix(entry.Name(), ".") {
				return filepath.SkipDir
			}
			return nil
		}
		if filepath.Ext(path) != ".go" || strings.HasSuffix(path, "_test.go") {
			return nil
		}
		raw, err := os.ReadFile(path)
		if err != nil {
			return err
		}
		if !strings.Contains(string(raw), importPath) {
			return nil
		}
		if _, found := allowed[path]; !found {
			t.Errorf("unexpected publication admission fence consumer: %s", path)
		}
		return nil
	})
	if err != nil {
		t.Fatal(err)
	}
}
