package k8supgradeplan

import "time"

type PlanStatus string

const (
	PlanStatusDraft       PlanStatus = "draft"
	PlanStatusApproving   PlanStatus = "approving"
	PlanStatusApproved    PlanStatus = "approved"
	PlanStatusScheduled   PlanStatus = "scheduled"
	PlanStatusTaskCreated PlanStatus = "task_created"
	PlanStatusRejected    PlanStatus = "rejected"
	PlanStatusCancelled   PlanStatus = "cancelled"
)

type PlannedUpgrade struct {
	ID                uint64     `json:"id"`
	Name              string     `json:"name"`
	CloudProvider     string     `json:"cloud_provider"`
	EOSVersion        string     `json:"eos_version"`
	EOSDate           time.Time  `json:"eos_date"`
	Deadline          int64      `json:"deadline"`
	TriggerTime       int64      `json:"trigger_time"`
	MaxRestartTimes   uint32     `json:"max_restart_times"`
	SelectorType      string     `json:"selector_type"`
	SelectorValue     string     `json:"selector_value"`
	Status            PlanStatus `json:"status"`
	SourceEventID     *uint64    `json:"source_event_id,omitempty"`
	ApprovalID        *uint64    `json:"approval_id,omitempty"`
	LinkedTaskID      *uint64    `json:"linked_task_id,omitempty"`
	CreatedBy         string     `json:"created_by"`
	EstimatedClusters int64      `json:"estimated_clusters"`
	CreatedAt         int64      `json:"created_at"`
	UpdatedAt         int64      `json:"updated_at"`
}

func IsTerminalStatus(s PlanStatus) bool {
	switch s {
	case PlanStatusTaskCreated, PlanStatusRejected, PlanStatusCancelled:
		return true
	default:
		return false
	}
}
