package event

import (
	apprent "github.com/tidbcloud/devops/entity/approval"
)

const (
	ChangeEventTypeCreate             EventType = "create"
	ChangeEventTypeSubmit             EventType = "submit"
	ChangeEventTypeUpdateBeforeDeploy EventType = "update_before_deploy"
	ChangeEventTypeSendApproval       EventType = "send_approval"
	ChangeEventTypeFinishApproval     EventType = "finish_approval"
	ChangeEventTypeExecDeploy         EventType = "exec_deploy"
	ChangeEventTypeVerifyDeploy       EventType = "verify_deploy"
	ChangeEventTypeClose              EventType = "close"
	ChangeEventTypeCancel             EventType = "cancel"
)

type ChangeEventDeploy struct {
	Order int `json:"order"`
}

type ChangeEventExecDeploy struct {
	ChangeEventDeploy `json:",inline"`

	Force        bool     `json:"force"`
	SkippedConds []string `json:"skipped_conds"`
}

type ChangeEventFinshApproval struct {
	Result apprent.ApprovalStatus `json:"result"`
}

type ChangeEventUpdate struct {
	UpdatedFields []UpdatedField `json:"updated_fields,omitempty"`
}

type ChangeEventCreate struct {
	IsDraft bool `json:"is_draft"`
}

type ChangeEventDetail struct {
	Create        *ChangeEventCreate        `json:"create,omitempty"`
	ExecDeploy    *ChangeEventExecDeploy    `json:"exec_deploy,omitempty"`
	VerifyDeploy  *ChangeEventDeploy        `json:"verify_deploy,omitempty"`
	FinshApproval *ChangeEventFinshApproval `json:"finish_approval,omitempty"`
	Update        *ChangeEventUpdate        `json:"update,omitempty"`
}

type ChangeEvent struct {
	BaseEvent `json:",inline"`

	Details ChangeEventDetail `json:"details"`
}
