package operation

type (
	ActionStatus      string
	ActionName        string
	ActionOrder       int
	ActionType        string
	ActionStartPolicy string
)

// Enums
// Update value list `XXXValues` when update a enum
const (
	ActionStatusCreated   ActionStatus = "created"
	ActionStatusRunning   ActionStatus = "running"
	ActionStatusSucceeded ActionStatus = "succeeded"
	ActionStatusFailed    ActionStatus = "failed"
	ActionStatusUnknown   ActionStatus = "unknown"
	ActionStatusSkipped   ActionStatus = "skipped"
	ActionStatusCanceled  ActionStatus = "canceled"

	ActionTypeAuto   ActionType = "auto"
	ActionTypeManual ActionType = "manual"

	ActionStartPolicyManual    ActionStartPolicy = "manual"
	ActionStartPolicyImmediate ActionStartPolicy = "immediate"
	ActionStartPolicySchedule  ActionStartPolicy = "schedule"
)

var (
	ActionStatusValues = []ActionStatus{
		ActionStatusCreated, ActionStatusRunning,
		ActionStatusSucceeded, ActionStatusFailed,
		ActionStatusUnknown, ActionStatusSkipped, ActionStatusCanceled,
	}
	ActionTypeValues = []ActionType{
		ActionTypeAuto, ActionTypeManual,
	}
	ActionStartPolicyValues = []ActionStartPolicy{
		ActionStartPolicyManual, ActionStartPolicyImmediate, ActionStartPolicySchedule,
	}
)

func (o ActionOrder) IsFirst() bool {
	return o == 0
}

func (o ActionOrder) Int() int {
	return int(o)
}

type ActionMetadata struct {
	Name             ActionName `json:"name"`
	Type             ActionType `json:"type"`
	AllowAnyoneApply bool       `json:"allow_anyone_apply"` // If true, anyone can apply this action after approval.
}
