package premiumupgrade

import (
	"github.com/tidbcloud/devops/api"
	prem "github.com/tidbcloud/devops/entity/premiumupgrade"
	upgradeapi "github.com/tidbcloud/devops/pkg/service/premiumupgrade/api"
)

type PreviewPlanReq struct {
	ClusterIDs         []string                       `json:"cluster_ids" binding:"required,min=1"`
	DesiredVersion     string                         `json:"desired_version" binding:"required"`
	ExecutionMode      prem.ExecutionMode             `json:"execution_mode,omitempty"`
	Scope              upgradeapi.UpgradeScope        `json:"scope" binding:"required"`
	ComponentImageTags []upgradeapi.ComponentImageTag `json:"component_image_tags,omitempty"`
}

type ListComponentPoliciesResp struct {
	api.BaseResp `json:",inline"`
	Items        []upgradeapi.ComponentPolicy `json:"items"`
}

type CheckTargetConflictsReq struct {
	ClusterIDs []string `json:"cluster_ids" binding:"required,min=1"`
}

type CheckTargetConflictsResp struct {
	api.BaseResp `json:",inline"`
	Conflicts    []upgradeapi.TargetConflict `json:"conflicts"`
}

type PreviewPlanResp struct {
	api.BaseResp `json:",inline"`
	Preview      *upgradeapi.PreviewPlanResult `json:"preview"`
}

type CreatePlanReq struct {
	PreviewPlanReq
	Name                 string `json:"name" binding:"required"`
	Reason               string `json:"reason" binding:"required"`
	ExpectedManifestHash string `json:"expected_manifest_hash" binding:"required"`
}

type CreatePlanResp struct {
	api.BaseResp `json:",inline"`
	Plan         *prem.UpgradePlan `json:"plan"`
}

type GetPlanResp struct {
	api.BaseResp `json:",inline"`
	Plan         *prem.UpgradePlan `json:"plan"`
}

type ListPlansReq struct {
	api.PaginationReq
	Applicant string   `form:"applicant"`
	TenantID  string   `form:"tenant_id"`
	Statuses  []string `form:"statuses"`
}

type ListPlansResp struct {
	api.BaseResp `json:",inline"`
	Total        int64               `json:"total"`
	Items        []*prem.UpgradePlan `json:"items"`
}
