package cloudconfig

import (
	"github.com/tidbcloud/devops/api"
	ccent "github.com/tidbcloud/devops/entity/cloudconfig"
)

type ListTemplatesReq struct {
	ClusterType  ccent.ClusterType `form:"cluster_type" binding:"required"`
	TemplateType string            `form:"template_type"`
	IDIn         []string          `form:"id_in"`
	NameIn       []string          `form:"name_in"`
	Version      string            `form:"version"`
	TenantID     string            `form:"tenant_id"`
}

type ListTemplatesResp struct {
	api.BaseResp `json:",inline"`

	Templates []*ccent.Template `json:"items"`
}

type CreateTemplateReq struct {
	Template *ccent.Template `json:"template"`

	AllowAssignID   bool `json:"allow_assign_id"`
	DenyPropagation bool `json:"deny_propagation"`
}

type CreateTemplateResp struct {
	api.BaseResp `json:",inline"`

	ID uint64 `json:"id"`
}

type ListConfigurationTemplateChangeReq struct {
	ListConfigurationChangeReq   `json:",inline"`
	ConfigurationTemplateLocator `json:",inline"`
}

type CreateConfigurationTemplateChangeReq struct {
	CreateConfigurationChangeReq `json:",inline"`
	ConfigurationTemplateLocator `json:",inline"`
}

type GetTemplateReq struct {
	ClusterType      ccent.ClusterType `form:"cluster_type" binding:"required"`
	WithDefaultCases bool              `form:"with_default_cases"`
}

type GetTemplateResp struct {
	api.BaseResp `json:",inline"`

	Template *ccent.Template `json:"template"`
}

type DiffTemplateReq struct {
	TemplateID  uint64            `form:"template_id" binding:"required"`
	ClusterType ccent.ClusterType `form:"cluster_type" binding:"required"`
}

type DiffTemplateResp struct {
	ConfigType         string                   `json:"config_type"`
	ModifiedParameters []ccent.ChangedParameter `json:"changed_parameters"`
}

type ListTemplateDefaultCaseBindingsReq struct {
	api.PaginationReq

	ClusterType             ccent.ClusterType `form:"cluster_type" binding:"required"`
	ConfigTypeIs            *string           `form:"config_type_is"`
	DefaultForVersion       *string           `form:"default_for_version"`
	DefaultForInstanceType  *string           `form:"default_for_instance_type"`
	DefaultForCloudProvider *string           `form:"default_for_cloud_provider"`
	DefaultForTenantID      *string           `form:"default_for_tenant_id"`
	ExactMatch              bool              `form:"exact_match"`
}

type ListTemplateDefaultCaseBindingsResp struct {
	DefaultCases []*ccent.TemplateDefaultCaseBinding `json:"items"`
	Total        int64                               `json:"total"`
}

type UpdateTemplateDefaultCaseBindingsReq struct {
	DefaultCases []*ccent.TemplateDefaultCaseBinding `json:"default_cases"`
}
