package bootstrapimpl

import (
	"slices"
	"testing"

	"github.com/nexuscrm/kernel/pkg/schema"
)

func TestRuntimeApprovalInvocationSystemTableIsPublished(t *testing.T) {
	var definition *schema.TableDefinition
	definitions := GetManagedTableDefinitions()
	for index := range definitions {
		candidate := &definitions[index]
		if candidate.TableName == "_System_RuntimeApprovalInvocation" {
			definition = candidate
			break
		}
	}
	if definition == nil {
		t.Fatal("_System_RuntimeApprovalInvocation is not published")
	}
	if definition.TableType != "system_core" || definition.Category != "runtime" ||
		definition.RequiredReadPermission != "BLOCKED" || definition.RequiredWritePermission != "BLOCKED" {
		t.Fatalf("table authority = %q/%q %q/%q, want system_core/runtime BLOCKED/BLOCKED",
			definition.TableType, definition.Category,
			definition.RequiredReadPermission, definition.RequiredWritePermission)
	}
	wantColumns := map[string]struct{}{
		"Id": {}, "ScopeDigest": {}, "IdempotencyKey": {}, "Operation": {},
		"DefinitionId": {}, "DefinitionVersion": {}, "ClosureDigest": {},
		"RequestDigest": {}, "Receipts": {}, "State": {}, "ResultPayload": {},
		"CreatedDate": {}, "LastModifiedDate": {},
	}
	for _, column := range definition.Columns {
		delete(wantColumns, column.Name)
	}
	if len(wantColumns) != 0 {
		t.Fatalf("runtime approval invocation columns missing: %v", wantColumns)
	}
	for _, index := range definition.Indices {
		if index.Name == "ux_runtime_approval_invocation_scope" && index.Unique &&
			slices.Equal(index.Columns, []string{"ScopeDigest", "IdempotencyKey"}) {
			return
		}
	}
	t.Fatal("runtime approval invocation scope/idempotency unique index is missing")
}
