package kernelimage

import "time"

type SelectionState string

const (
	SelectionStateSelected SelectionState = "SELECTED"
	SelectionStateExcluded SelectionState = "EXCLUDED"
)

type ExclusionReason string

const (
	ExclusionReasonBuildIncomplete     ExclusionReason = "BUILD_INCOMPLETE"
	ExclusionReasonDeliveryPending     ExclusionReason = "DELIVERY_PENDING"
	ExclusionReasonSyncIncomplete      ExclusionReason = "SYNC_INCOMPLETE"
	ExclusionReasonMasked              ExclusionReason = "MASKED"
	ExclusionReasonInvalidVersion      ExclusionReason = "INVALID_VERSION"
	ExclusionReasonOutOfVersionWindow  ExclusionReason = "OUT_OF_VERSION_WINDOW"
	ExclusionReasonOutOfImageTagWindow ExclusionReason = "OUT_OF_IMAGE_TAG_WINDOW"
	ExclusionReasonRetired             ExclusionReason = "RETIRED"
)

type SelectionPolicy struct {
	VersionCount           int
	ImageTagCount          int
	LocalDevOpsEnvironment string
}

type SelectionItem struct {
	Release         *Release
	IsDefault       bool
	SelectionState  SelectionState
	ExclusionReason ExclusionReason
}

type SelectionVersion struct {
	Version string
	Images  []*SelectionItem
}

type SelectionResult struct {
	Policy       SelectionPolicy
	CalculatedAt time.Time
	Versions     []*SelectionVersion
	Excluded     []*SelectionItem
}
