package catalogread

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

func TestReaderHasNoCatalogLifecycleOrWriterDependency(t *testing.T) {
	_, file, _, ok := runtime.Caller(0)
	if !ok {
		t.Fatal("resolve test file")
	}
	packageDir := filepath.Dir(file)
	entries, err := os.ReadDir(packageDir)
	if err != nil {
		t.Fatal(err)
	}
	for _, entry := range entries {
		if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".go") || strings.HasSuffix(entry.Name(), "_test.go") {
			continue
		}
		raw, err := os.ReadFile(filepath.Join(packageDir, entry.Name()))
		if err != nil {
			t.Fatal(err)
		}
		for _, forbidden := range []string{
			`"github.com/pingcap-inc/nexuscrm-controlplane/catalogapp"`,
			`"github.com/pingcap-inc/nexuscrm-controlplane/catalogpublication"`,
			`"github.com/pingcap-inc/nexuscrm-controlplane/internal/catalogwriter"`,
			"ExecContext", "Exec(", "BeginTx", "Begin(",
		} {
			if bytes.Contains(raw, []byte(forbidden)) {
				t.Fatalf("read facade source %s contains forbidden lifecycle or writer dependency %q", entry.Name(), forbidden)
			}
		}
	}
}
