package cluster

import "github.com/tidbcloud/devops/api"

type CreateMigrationClusterTiDBNodeRequest struct {
	NodeSpecKey    string `json:"node_spec_key"`
	DisplayName    string `json:"display_name" binding:"required"`
	NodeCount      *int32 `json:"node_count"`
	IsDefaultGroup bool   `json:"is_default_group"`
}

type CreateMigrationClusterStorageNodeRequest struct {
	NodeSpecKey string `json:"node_spec_key"`
	NodeCount   *int32 `json:"node_count"`
}

type CreateMigrationClusterPDNodeRequest struct {
	NodeSpecKey string `json:"node_spec_key"`
}

type CreateMigrationClusterConfigSyncRequest struct {
	AllowFallbackToBackup bool `json:"allow_fallback_to_backup"`
	SkipSystemVariables   bool `json:"skip_system_variables"`
	SkipPDConfig          bool `json:"skip_pd_config"`
	SkipPDServerConfig    bool `json:"skip_pd_server_config"`
	SkipPlacementRules    bool `json:"skip_placement_rules"`
	SkipStoreLimits       bool `json:"skip_store_limits"`
}

type CreateMigrationClusterRequest struct {
	BackupID              string                                    `json:"backup_id"`
	TargetProjectID       string                                    `json:"target_project_id"`
	ClusterDisplayName    string                                    `json:"cluster_display_name" binding:"required"`
	TargetRegionID        string                                    `json:"target_region_id"`
	RestoreMode           string                                    `json:"restore_mode"`
	BackupRegionID        string                                    `json:"backup_region_id"`
	ConfigSyncStrategy    *CreateMigrationClusterConfigSyncRequest  `json:"config_sync_strategy"`
	TiDBNodeSetting       []CreateMigrationClusterTiDBNodeRequest   `json:"tidb_node_setting"`
	TiKVNodeSetting       *CreateMigrationClusterStorageNodeRequest `json:"tikv_node_setting"`
	TiFlashNodeSetting    *CreateMigrationClusterStorageNodeRequest `json:"tiflash_node_setting"`
	PDNodeSetting         *CreateMigrationClusterPDNodeRequest      `json:"pd_node_setting"`
	BrVersion             string                                    `json:"br_version"`
	BrImageTag            string                                    `json:"br_image_tag"`
	BrCustomOptions       string                                    `json:"br_custom_options"`
	TargetClusterVersion  string                                    `json:"target_cluster_version"`
	TiDBImageTag          string                                    `json:"tidb_image_tag"`
	TiKVImageTag          string                                    `json:"tikv_image_tag"`
	PDImageTag            string                                    `json:"pd_image_tag"`
	TiFlashImageTag       string                                    `json:"tiflash_image_tag"`
	CreateTiDBImageTag    string                                    `json:"create_tidb_image_tag"`
	CreateTiKVImageTag    string                                    `json:"create_tikv_image_tag"`
	CreatePDImageTag      string                                    `json:"create_pd_image_tag"`
	CreateTiFlashImageTag string                                    `json:"create_tiflash_image_tag"`

	Reason string `json:"reason"`
}

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

	InstanceID uint64 `json:"instance_id"`
}

type MigratePrivateLinkTiDBGroupPair struct {
	SourceTiDBGroupDisplayName string `json:"source_tidb_group_display_name"`
	SourceTiDBGroupID          string `json:"source_tidb_group_id" binding:"required"`
	TargetTiDBGroupID          string `json:"target_tidb_group_id" binding:"required"`
}

type MigratePrivateLinkRequest struct {
	TargetClusterID string                            `json:"target_cluster_id" binding:"required"`
	TiDBGroupPairs  []MigratePrivateLinkTiDBGroupPair `json:"tidb_group_pairs" binding:"required"`

	Reason string `json:"reason"`
}

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

	InstanceID uint64 `json:"instance_id"`
}
