package bootstrapimpl

import (
	"slices"
	"testing"

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

func TestConnectorRuntimeHandoffReceiptSystemTable(t *testing.T) {
	defs := GetManagedTableDefinitions()
	var receipt *schema.TableDefinition
	for index := range defs {
		if defs[index].TableName == "_System_ConnectorRuntimeHandoffReceipt" {
			receipt = &defs[index]
			break
		}
	}
	if receipt == nil {
		t.Fatal("_System_ConnectorRuntimeHandoffReceipt is not published")
	}
	if receipt.TableType != "system_core" || receipt.Category != "integration" {
		t.Fatalf(
			"table type/category = %q/%q, want system_core/integration",
			receipt.TableType,
			receipt.Category,
		)
	}
	if receipt.RequiredReadPermission != "BLOCKED" ||
		receipt.RequiredWritePermission != "BLOCKED" {
		t.Fatalf(
			"permissions = %q/%q, want BLOCKED/BLOCKED",
			receipt.RequiredReadPermission,
			receipt.RequiredWritePermission,
		)
	}

	wantIndexes := map[string][]string{
		"ux_connector_runtime_handoff_command": {
			"ScopeDigest", "CommandId",
		},
		"ux_connector_runtime_handoff_idempotency": {
			"ScopeDigest", "IdempotencyKey",
		},
	}
	for _, index := range receipt.Indices {
		want, required := wantIndexes[index.Name]
		if !required {
			continue
		}
		if !index.Unique || !slices.Equal(index.Columns, want) {
			t.Fatalf(
				"index %s = unique:%t columns:%v, want unique:%t columns:%v",
				index.Name,
				index.Unique,
				index.Columns,
				true,
				want,
			)
		}
		delete(wantIndexes, index.Name)
	}
	if len(wantIndexes) != 0 {
		t.Fatalf("receipt uniqueness indexes are missing: %v", wantIndexes)
	}
}
