package catalogtenant

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

func TestTenantAuthorityHasNoOtherOwnerVerifierOrBackendDependency(t *testing.T) {
	_, file, _, ok := runtime.Caller(0)
	if !ok {
		t.Fatal("resolve test file")
	}
	packageDir := filepath.Dir(file)
	verifierPath := filepath.Join(packageDir, "layout_bundle_owner_verification.go")
	forbiddenEverywhere := []string{
		"nexuscrm-controlplane/catalogapp",
		"pingcap-inc/NexusCRM/backend",
	}
	verifierOnlyImports := []string{
		"nexuscrm-controlplane/catalogpublication",
		"nexuscrm-controlplane/internal/catalogverificationtx",
	}
	forbiddenVerifierSeams := []string{
		"database/sql",
		"_System_",
		"QueryContext",
		"ExecContext",
		"ProofAdapter",
		"VerificationCallback",
	}
	err := filepath.WalkDir(packageDir, func(path string, entry os.DirEntry, walkErr error) error {
		if walkErr != nil {
			return walkErr
		}
		if entry.IsDir() || filepath.Ext(path) != ".go" ||
			strings.HasSuffix(path, "_test.go") {
			return nil
		}
		raw, err := os.ReadFile(path)
		if err != nil {
			return err
		}
		source := string(raw)
		for _, importPath := range forbiddenEverywhere {
			if strings.Contains(source, importPath) {
				t.Errorf("tenant authority imports forbidden boundary %q in %s", importPath, path)
			}
		}
		if path == verifierPath {
			for _, seam := range forbiddenVerifierSeams {
				if strings.Contains(source, seam) {
					t.Errorf("fixed tenant verifier contains forbidden seam %q", seam)
				}
			}
		} else {
			for _, importPath := range verifierOnlyImports {
				if strings.Contains(source, importPath) {
					t.Errorf(
						"tenant authority imports verifier-only boundary %q outside %s: %s",
						importPath,
						verifierPath,
						path,
					)
				}
			}
		}
		if strings.Contains(source, "DELETE FROM _System_CatalogTenant") {
			t.Errorf("tenant authority deletes permanent identity state in %s", path)
		}
		return nil
	})
	if err != nil {
		t.Fatal(err)
	}
}
