package layoutactivationsetv1

import (
	"github.com/pingcap-inc/nexuscrm-contract/pkg/catalogpublicationv1"
	"github.com/pingcap-inc/nexuscrm-contract/pkg/layoutbundlekeyv1"
	"github.com/pingcap-inc/nexuscrm-contract/pkg/layoutroutingsecurityv1"
)

const (
	CanonicalizationVersion = "nexuscrm.layout-activation-set-canonical/v1"

	MaxOpaqueIDBytes     = 255
	MaxActivationEntries = 100_000
	MaxCanonicalSetBytes = 64 << 20
)

// LayoutBundleRevisionID is one exact target-local immutable revision
// identity. It is distinct from artifact, validation, and view identities.
type LayoutBundleRevisionID string

// LayoutValidationID is one exact target-local immutable validation-evidence
// identity. It is distinct from the revision it validates.
type LayoutValidationID string

// Entry selects the exact prepared evidence for one portable bundle slot.
type Entry struct {
	BundleKey                layoutbundlekeyv1.BundleKey
	LayoutBundleRevisionID   LayoutBundleRevisionID
	LayoutValidationID       LayoutValidationID
	ResolvedLayoutViewDigest string
}

// Set is the complete immutable activation projection for one exact Catalog
// and routing-security binding. Entries must be present even when empty.
type Set struct {
	CanonicalizationVersion     string
	OrgID                       string
	CatalogSchema               catalogpublicationv1.CatalogSchemaBinding
	RoutingSecurity             layoutroutingsecurityv1.Binding
	RequiredBundleKeySetDigest  string
	PreparationProvenanceDigest string
	Entries                     []Entry
}
