package dispatch

import (
	baseapi "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/api/base"
	dispatchent "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/entity/ticket-manager/dispatch"
)

type ListPoliciesRequest struct {
	baseapi.PageRequest

	FamilyID string                     `form:"family_id" json:"family_id"`
	NameLike string                     `form:"name_like" json:"name_like"`
	Status   dispatchent.PolicyStatus   `form:"status" json:"status"`
	Statuses []dispatchent.PolicyStatus `form:"statuses" json:"statuses"`
}

type ListPoliciesResponse struct {
	*baseapi.BaseResponse

	Policies []*dispatchent.Policy `json:"policies"`
	Total    int64                 `json:"total"`
}

type GetOptionsResponse struct {
	*baseapi.BaseResponse

	Options dispatchent.FieldOption `json:"options"`
}

type CreatePolicyRequest struct {
	Name             string             `json:"name" binding:"required"`
	Rules            []dispatchent.Rule `json:"rules"`
	Trigger          PolicyTriggerInput `json:"trigger"`
	ReplacesPolicyID *uint64            `json:"replaces_policy_id,omitempty"`
}

type CreatePolicyResponse struct {
	*baseapi.BaseResponse

	Policy *dispatchent.Policy `json:"policy"`
}

type GetPolicyResponse struct {
	*baseapi.BaseResponse

	Policy *dispatchent.Policy `json:"policy"`
}

type UpdatePolicyRequest struct {
	Name    string              `json:"name" binding:"required"`
	Rules   []dispatchent.Rule  `json:"rules,omitempty"`
	Trigger *PolicyTriggerInput `json:"trigger" binding:"required"`
}

type UpdatePolicyResponse struct {
	*baseapi.BaseResponse

	Policy *dispatchent.Policy `json:"policy"`
}

type PublishPolicyResponse struct {
	*baseapi.BaseResponse

	Policy *dispatchent.Policy `json:"policy"`
}

type RetirePolicyResponse struct {
	*baseapi.BaseResponse

	Policy *dispatchent.Policy `json:"policy"`
}

type PolicyTriggerInput struct {
	Enable        bool     `json:"enable"`
	SourceIn      []string `json:"source_in,omitempty"`
	IssueLabelAll []string `json:"issue_label_all,omitempty"`
	IssueStatusIn []string `json:"issue_status_in,omitempty"`
	ProjectKeyIn  []string `json:"project_key_in,omitempty"`
}
