package entity

import "time"

type DedicatedToPremiumPrecheckState string

const (
	DedicatedToPremiumPrecheckStatePending   DedicatedToPremiumPrecheckState = "PENDING"
	DedicatedToPremiumPrecheckStateRunning   DedicatedToPremiumPrecheckState = "RUNNING"
	DedicatedToPremiumPrecheckStateSucceeded DedicatedToPremiumPrecheckState = "SUCCEEDED"
	DedicatedToPremiumPrecheckStateFailed    DedicatedToPremiumPrecheckState = "FAILED"
)

type PrecheckCategory string

const (
	PrecheckCategoryFeatureGap         PrecheckCategory = "FEATURE_GAP"
	PrecheckCategoryMigrationReadiness PrecheckCategory = "MIGRATION_READINESS"
)

type PrecheckItemStatus string

const (
	PrecheckItemStatusRiskFound   PrecheckItemStatus = "RISK_FOUND"
	PrecheckItemStatusNoRiskFound PrecheckItemStatus = "NO_RISK_FOUND"
	PrecheckItemStatusNeedsInput  PrecheckItemStatus = "NEEDS_INPUT"
)

type PrecheckItemExecutionState string

const (
	PrecheckItemExecutionStatePending   PrecheckItemExecutionState = "PENDING"
	PrecheckItemExecutionStateRunning   PrecheckItemExecutionState = "RUNNING"
	PrecheckItemExecutionStateCompleted PrecheckItemExecutionState = "COMPLETED"
	PrecheckItemExecutionStateFailed    PrecheckItemExecutionState = "FAILED"
)

type DedicatedToPremiumPrecheck struct {
	ID                     uint64
	SourceClusterID        uint64
	MigrationAccountEmail  string
	TargetPremiumProjectID *uint64
	Applicant              string
	State                  DedicatedToPremiumPrecheckState
	FailureMessage         string
	CreatedAt              time.Time
	UpdatedAt              time.Time
	StartedAt              *time.Time
	FinishedAt             *time.Time
	Items                  []*DedicatedToPremiumPrecheckItem
}

type DedicatedToPremiumPrecheckItem struct {
	ID             uint64
	PrecheckID     uint64
	Category       PrecheckCategory
	CheckKey       string
	Title          string
	Position       int
	Status         PrecheckItemStatus
	Why            string
	Evidence       string
	Action         string
	ExecutionState PrecheckItemExecutionState
	ExecutionError string
	CreatedAt      time.Time
	UpdatedAt      time.Time
}
