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 CreateDispatchTriggerRequest struct {
	Source   string                           `json:"source" binding:"required"`
	Input    CreateDispatchTriggerInput       `json:"input" binding:"required"`
	PolicyID *uint64                          `json:"policy_id,omitempty"`
	Dryrun   *dispatchent.DispatchDryrunInput `json:"dryrun,omitempty"`
}

type CreateDispatchTriggerInput struct {
	IssueKey string `json:"issue_key" binding:"required"`
}

type CreateDispatchTriggerResponse struct {
	*baseapi.BaseResponse

	Trigger *dispatchent.DispatchTrigger `json:"trigger"`
}

type GetDispatchTriggerResponse struct {
	*baseapi.BaseResponse

	Trigger *dispatchent.DispatchTrigger `json:"trigger"`
}

type ListDispatchTriggersRequest struct {
	baseapi.PageRequest

	IssueKeyLike string                              `form:"issue_key_like" json:"issue_key_like"`
	Statuses     []dispatchent.DispatchTriggerStatus `form:"statuses" json:"statuses"`
	Source       string                              `form:"source" json:"source"`
}

type ListDispatchTriggersResponse struct {
	*baseapi.BaseResponse

	Triggers []*dispatchent.DispatchTrigger `json:"triggers"`
	Total    int64                          `json:"total"`
}

type GetExecutionResponse struct {
	*baseapi.BaseResponse

	Execution *dispatchent.Execution `json:"execution"`
}

type ListExecutionsRequest struct {
	baseapi.PageRequest

	IssueKeyLike   string                        `form:"issue_key_like" json:"issue_key_like"`
	PolicyFamilyID string                        `form:"policy_family_id" json:"policy_family_id"`
	Mode           dispatchent.ExecutionMode     `form:"mode" json:"mode"`
	Statuses       []dispatchent.ExecutionStatus `form:"statuses" json:"statuses"`
}

type ListExecutionsResponse struct {
	*baseapi.BaseResponse

	Executions []*dispatchent.Execution `json:"executions"`
	Total      int64                    `json:"total"`
}
