package controlplane

import (
	"os"
	"strings"
	"testing"
)

func TestManagedSchemaOwnsPermissionStateInitializationBeforeWriterBinding(t *testing.T) {
	source, err := os.ReadFile("bootstrapimpl/schema.go")
	if err != nil {
		t.Fatalf("read bootstrapimpl/schema.go: %v", err)
	}
	text := string(source)
	start := strings.Index(text, "func initializeSchema(")
	if start < 0 {
		t.Fatalf("initializeSchema source bound missing: start=%d", start)
	}

	managedSchema := text[start:]
	ddlOnlyReturn := strings.Index(managedSchema, "if !mode.includeManagedMetadata")
	initialize := strings.Index(managedSchema, "persistencewiring.EnsurePermissionStateInitialized")
	constructWriters := strings.Index(managedSchema, "persistencewiring.NewPermissionStateDirectWriters")
	bindWriters := strings.Index(managedSchema, "directWriters.BindSchema")
	firstManagedWriter := strings.Index(managedSchema, `runPhase("phase2_object_metadata"`)
	if ddlOnlyReturn < 0 || initialize < 0 || constructWriters < 0 || bindWriters < 0 || firstManagedWriter < 0 {
		t.Fatalf(
			"managed-schema permission-state anchors missing: ddlOnlyReturn=%d initialize=%d construct=%d bind=%d firstManagedWriter=%d",
			ddlOnlyReturn, initialize, constructWriters, bindWriters, firstManagedWriter,
		)
	}
	if !(ddlOnlyReturn < initialize && initialize < constructWriters && constructWriters < bindWriters && bindWriters < firstManagedWriter) {
		t.Fatalf(
			"managed-schema permission-state order is unsafe: ddlOnlyReturn=%d initialize=%d construct=%d bind=%d firstManagedWriter=%d",
			ddlOnlyReturn, initialize, constructWriters, bindWriters, firstManagedWriter,
		)
	}
}
