package config_center

const (
	CONFIG_CENTER_INTERNAL_META_PROFILE string = "CC_META_PROFILE"

	DEDICATED_TIDB_COMPONENT_TIDB                string = "tidb"
	DEDICATED_TIDB_COMPONENT_TIKV                string = "tikv"
	DEDICATED_TIDB_COMPONENT_PD                  string = "pd"
	DEDICATED_TIDB_COMPONENT_TIFLASH             string = "tiflash"
	DEDICATED_TIDB_COMPONENT_TICDC               string = "ticdc"
	DEDICATED_TIDB_COMPONENT_RESTORE             string = "restore"
	DEDICATED_TIDB_COMPONENT_BACKUP              string = "backup"
	DEDICATED_TIDB_COMPONENT_COMPACT_BACKUP_BR   string = "compact-backup-br"
	DEDICATED_TIDB_COMPONENT_COMPACT_BACKUP_TIKV string = "compact-backup-tikv"
	DEDICATED_TIDB_COMPONENT_TIDB_LIGHTNING      string = "tidb-lightning"
	DEDICATED_TIDB_COMPONENT_TIPROXY             string = "tiproxy"
	DEDICATED_TIDB_COMPONENT_DM                  string = "data-migration"

	DEDICATED_TIDB_CONFIG_TIDB            string = "tidb"
	DEDICATED_TIDB_CONFIG_TIKV            string = "tikv"
	DEDICATED_TIDB_CONFIG_PD              string = "pd"
	DEDICATED_TIDB_CONFIG_TIFLASH         string = "tiflash"
	DEDICATED_TIDB_CONFIG_TIFLASH_LEARNER string = "tiflash_learner"
	DEDICATED_TIDB_CONFIG_TICDC           string = "ticdc"
	DEDICATED_TIDB_CONFIG_INITSQL         string = "INIT_SQL"
	DEDICATED_TIDB_CONFIG_RESTORE         string = "restore"
	DEDICATED_TIDB_CONFIG_BACKUP          string = "backup"
	DEDICATED_TIDB_CONFIG_TIDB_LIGHTNING  string = "tidb-lightning"
	DEDICATED_TIDB_CONFIG_TIPROXY         string = "tiproxy"
	// DEDICATED_TIDB_CONFIG_DM              string = "dm" todo: split to master and worker

	TICDC_COMPONENT_TICDC string = "ticdc"
	TICDC_CONFIG_TICDC    string = "ticdc"

	CHANGEFEED_CONFIG_CHANGEFEED_KAFKA          string = "changefeed-kafka"
	CHANGEFEED_CONFIG_CHANGEFEED_URI_KAFKA      string = "changefeed-uri-kafka"
	CHANGEFEED_CONFIG_CHANGEFEED_MYSQL          string = "changefeed-mysql"
	CHANGEFEED_CONFIG_CHANGEFEED_URI_MYSQL      string = "changefeed-uri-mysql"
	CHANGEFEED_CONFIG_CHANGEFEED_S3             string = "changefeed-s3"
	CHANGEFEED_CONFIG_CHANGEFEED_URI_S3         string = "changefeed-uri-s3"
	CHANGEFEED_CONFIG_CHANGEFEED_GCS            string = "changefeed-gcs"
	CHANGEFEED_CONFIG_CHANGEFEED_URI_GCS        string = "changefeed-uri-gcs"
	CHANGEFEED_CONFIG_CHANGEFEED_SERVERLESS     string = "changefeed-serverless_tidb"
	CHANGEFEED_CONFIG_CHANGEFEED_URI_SERVERLESS string = "changefeed-uri-serverless_tidb"
	CHANGEFEED_CONFIG_CHANGEFEED_PULSAR         string = "changefeed-pulsar"
	CHANGEFEED_CONFIG_CHANGEFEED_URI_PULSAR     string = "changefeed-uri-pulsar"
	CHANGEFEED_CONFIG_CHANGEFEED_AZBLOB         string = "changefeed-azblob"
	CHANGEFEED_CONFIG_CHANGEFEED_URI_AZBLOB     string = "changefeed-uri-azblob"

	SHARED_POOL_COMPONENT_TIKV               string = "tikv"
	SHARED_POOL_COMPONENT_PD                 string = "pd"
	SHARED_POOL_COMPONENT_TIKV_WORKER        string = "tikv_worker"
	SHARED_POOL_COMPONENT_COPROCESSOR_WORKER string = "coprocessor_worker"
	SHARED_POOL_COMPONENT_TIDB_WORKER        string = "tidb_worker"
	SHARED_POOL_COMPONENT_PD_TSO             string = "pd_tso"
	SHARED_POOL_COMPONENT_PD_SCHEDULING      string = "pd_scheduling"
	SHARED_POOL_COMPONENT_RESOURCE_MANAGER   string = "resource_manager"
	SHARED_POOL_COMPONENT_TIFLASH_WRITE      string = "tiflash_write"
	SHARED_POOL_COMPONENT_TIFLASH_COMPUTE    string = "tiflash_compute"
	SHARED_POOL_COMPONENT_TIDB               string = "tidb"
	SHARED_POOL_COMPONENT_TIPROXY            string = "tiproxy"
	SHARED_POOL_COMPONENT_SCHEMA_MANAGER     string = "schema_manager"
	SHARED_POOL_COMPONENT_DATA_MIGRATION     string = "data_migration"

	SHARED_POOL_COMPONENT_TIBR_AUTOBACKUP   string = "tibr_autobackup"
	SHARED_POOL_COMPONENT_TIBR_RESTORE      string = "tibr_restore"
	SHARED_POOL_COMPONENT_TIBRGC_T2_DFSGC   string = "tibrgc_t2_dfsgc"
	SHARED_POOL_COMPONENT_TIBRGC_T3_ARCHIVE string = "tibrgc_t3_archive"
	SHARED_POOL_COMPONENT_CLASSIC_RESTORE   string = "classic_restore"

	SHARED_POOL_CONFIG_INITSQL                 string = "INIT_SQL"
	SHARED_POOL_CONFIG_TIKV                    string = "tikv"
	SHARED_POOL_CONFIG_PD                      string = "pd"
	SHARED_POOL_CONFIG_TIKV_WORKER             string = "tikv_worker"
	SHARED_POOL_CONFIG_COPROCESSOR_WORKER      string = "coprocessor_worker"
	SHARED_POOL_CONFIG_TIDB_WORKER             string = "tidb_worker"
	SHARED_POOL_CONFIG_PD_TSO                  string = "pd_tso"
	SHARED_POOL_CONFIG_PD_SCHEDULING           string = "pd_scheduling"
	SHARED_POOL_CONFIG_RESOURCE_MANAGER        string = "resource_manager"
	SHARED_POOL_CONFIG_TIFLASH_WRITE           string = "tiflash_write"
	SHARED_POOL_CONFIG_TIFLASH_LEARNER         string = "tiflash_learner"
	SHARED_POOL_CONFIG_TIFLASH_COMPUTE         string = "tiflash_compute"
	SHARED_POOL_CONFIG_TIFLASH_COMPUTE_LEARNER string = "tiflash_compute_learner"
	SHARED_POOL_CONFIG_TIDB_SEM                string = "tidb_sem"
	SHARED_POOL_CONFIG_TIDB                    string = "tidb"
	SHARED_POOL_CONFIG_TIPROXY                 string = "tiproxy"
	SHARED_POOL_CONFIG_SCHEMA_MANAGER          string = "schema_manager"

	SHARED_POOL_CONFIG_TIBR_AUTOBACKUP   string = "tibr_autobackup"
	SHARED_POOL_CONFIG_TIBR_RESTORE      string = "tibr_restore"
	SHARED_POOL_CONFIG_TIBRGC_T2_DFSGC   string = "tibrgc_t2_dfsgc"
	SHARED_POOL_CONFIG_TIBRGC_T3_ARCHIVE string = "tibrgc_t3_archive"
	SHARED_POOL_CONFIG_CLASSIC_RESTORE   string = "classic_restore"

	LOGICAL_CLUSTER_COMPONENT_TIDB     string = "tidb"
	LOGICAL_CLUSTER_COMPONENT_TIPROXY  string = "tiproxy"
	LOGICAL_CLUSTER_COMPONENT_DUMPLING string = "dumpling"

	LOGICAL_CLUSTER_CONFIG_TIDB     string = "tidb"
	LOGICAL_CLUSTER_CONFIG_TIPROXY  string = "tiproxy"
	LOGICAL_CLUSTER_CONFIG_DUMPLING string = "dumpling"

	// the same as ClusterType_TICDC, reduce redundancy
	// TICDC_NG_COMPONENT_TICDC string = "ticdc"
	// TICDC_NG_CONFIG_TICDC    string = "ticdc"

	TEMPLATE_TAG_EFFECTIVE_MINOR_VERSION string = "effective_minor_version"
	TEMPLATE_TAG_TEMPLATE_TYPE           string = "template_type" // [default custom custom_part]
	TEMPLATE_TAG_CREATOR_EMAIL           string = "creator_email"
	TEMPLATE_TAG_OWNER_TENANT_ID         string = "owner_tenant_id"

	// workaround: fake region as default template source for BYOC
	BYOC_EXAMPLE_REGION string = "byoc-example-region"
)

func (c ClusterType) UseRegionalMode() bool {
	if c == ClusterType_SHARED_POOL || c == ClusterType_LOGICAL_CLUSTER {
		return true
	}
	return false
}

// special config type "CC_META_PROFILE" to store images info
type MetaProfileConfig struct {
	//ClusterVersion        string            `toml:"cluster_version" json:"cluster_version"`
	ComponentTags         map[string]string `toml:"component_tags" json:"component_tags"`
	ComponentVersions     map[string]string `toml:"component_versions" json:"component_versions"`
	ConfigCustomTemplates map[string]int64  `toml:"config_custom_templates" json:"config_custom_templates"`
}

func (c ClusterType) AvailableComponents() []string {
	switch c {
	case ClusterType_DEDICATED_TIDB:
		return []string{
			DEDICATED_TIDB_COMPONENT_TIDB,
			DEDICATED_TIDB_COMPONENT_TIKV,
			DEDICATED_TIDB_COMPONENT_PD,
			DEDICATED_TIDB_COMPONENT_TIFLASH,
			DEDICATED_TIDB_COMPONENT_TICDC,
			DEDICATED_TIDB_COMPONENT_RESTORE,
			DEDICATED_TIDB_COMPONENT_BACKUP,
			DEDICATED_TIDB_COMPONENT_COMPACT_BACKUP_BR,
			DEDICATED_TIDB_COMPONENT_COMPACT_BACKUP_TIKV,
			DEDICATED_TIDB_COMPONENT_TIDB_LIGHTNING,
			DEDICATED_TIDB_COMPONENT_TIPROXY,
			DEDICATED_TIDB_COMPONENT_DM,
		}
	case ClusterType_TICDC, ClusterType_TICDC_NG:
		return []string{
			TICDC_COMPONENT_TICDC,
		}
	case ClusterType_CHANGEFEED, ClusterType_CHANGEFEED_NG, ClusterType_CHANGEFEED_ESSENTIAL:
		return []string{}
	case ClusterType_SHARED_POOL:
		return []string{
			SHARED_POOL_COMPONENT_TIKV,
			SHARED_POOL_COMPONENT_PD,
			SHARED_POOL_COMPONENT_TIKV_WORKER,
			SHARED_POOL_COMPONENT_COPROCESSOR_WORKER,
			SHARED_POOL_COMPONENT_TIDB_WORKER,
			SHARED_POOL_COMPONENT_PD_TSO,
			SHARED_POOL_COMPONENT_PD_SCHEDULING,
			SHARED_POOL_COMPONENT_RESOURCE_MANAGER,
			SHARED_POOL_COMPONENT_TIFLASH_WRITE,
			SHARED_POOL_COMPONENT_TIFLASH_COMPUTE,
			SHARED_POOL_COMPONENT_TIDB,
			SHARED_POOL_COMPONENT_TIPROXY,
			SHARED_POOL_COMPONENT_SCHEMA_MANAGER,
			SHARED_POOL_COMPONENT_TIBR_AUTOBACKUP,
			SHARED_POOL_COMPONENT_TIBR_RESTORE,
			SHARED_POOL_COMPONENT_TIBRGC_T2_DFSGC,
			SHARED_POOL_COMPONENT_TIBRGC_T3_ARCHIVE,
			SHARED_POOL_COMPONENT_CLASSIC_RESTORE,
			SHARED_POOL_COMPONENT_DATA_MIGRATION,
		}
	case ClusterType_LOGICAL_CLUSTER:
		return []string{
			LOGICAL_CLUSTER_COMPONENT_TIDB,
			LOGICAL_CLUSTER_COMPONENT_TIPROXY,
			LOGICAL_CLUSTER_COMPONENT_DUMPLING,
		}
	}
	return []string{}
}

func (c ClusterType) AvailableConfigTypes() []string {
	switch c {
	case ClusterType_DEDICATED_TIDB:
		return []string{
			DEDICATED_TIDB_CONFIG_TIDB,
			DEDICATED_TIDB_CONFIG_TIKV,
			DEDICATED_TIDB_CONFIG_PD,
			DEDICATED_TIDB_CONFIG_TIFLASH,
			DEDICATED_TIDB_CONFIG_TIFLASH_LEARNER,
			DEDICATED_TIDB_CONFIG_INITSQL,
			DEDICATED_TIDB_CONFIG_TICDC,
			DEDICATED_TIDB_CONFIG_RESTORE,
			DEDICATED_TIDB_CONFIG_BACKUP,
			DEDICATED_TIDB_CONFIG_TIDB_LIGHTNING,
			DEDICATED_TIDB_CONFIG_TIPROXY,
		}
	case ClusterType_TICDC, ClusterType_TICDC_NG:
		return []string{
			TICDC_CONFIG_TICDC,
		}
	case ClusterType_CHANGEFEED, ClusterType_CHANGEFEED_NG, ClusterType_CHANGEFEED_ESSENTIAL:
		return []string{
			CHANGEFEED_CONFIG_CHANGEFEED_KAFKA,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_KAFKA,
			CHANGEFEED_CONFIG_CHANGEFEED_MYSQL,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_MYSQL,
			CHANGEFEED_CONFIG_CHANGEFEED_S3,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_S3,
			CHANGEFEED_CONFIG_CHANGEFEED_GCS,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_GCS,
			CHANGEFEED_CONFIG_CHANGEFEED_SERVERLESS,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_SERVERLESS,
			CHANGEFEED_CONFIG_CHANGEFEED_PULSAR,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_PULSAR,
			CHANGEFEED_CONFIG_CHANGEFEED_AZBLOB,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_AZBLOB,
		}
	case ClusterType_SHARED_POOL:
		return []string{
			SHARED_POOL_CONFIG_INITSQL,
			SHARED_POOL_CONFIG_TIKV,
			SHARED_POOL_CONFIG_PD,
			SHARED_POOL_CONFIG_TIKV_WORKER,
			SHARED_POOL_CONFIG_COPROCESSOR_WORKER,
			SHARED_POOL_CONFIG_TIDB_WORKER,
			SHARED_POOL_CONFIG_PD_TSO,
			SHARED_POOL_CONFIG_PD_SCHEDULING,
			SHARED_POOL_CONFIG_RESOURCE_MANAGER,
			SHARED_POOL_CONFIG_TIFLASH_WRITE,
			SHARED_POOL_CONFIG_TIFLASH_LEARNER,
			SHARED_POOL_CONFIG_TIFLASH_COMPUTE,
			SHARED_POOL_CONFIG_TIFLASH_COMPUTE_LEARNER,
			SHARED_POOL_CONFIG_TIDB_SEM,
			SHARED_POOL_CONFIG_TIBR_AUTOBACKUP,
			SHARED_POOL_CONFIG_TIBR_RESTORE,
			SHARED_POOL_CONFIG_TIBRGC_T2_DFSGC,
			SHARED_POOL_CONFIG_TIBRGC_T3_ARCHIVE,
			SHARED_POOL_CONFIG_CLASSIC_RESTORE,
			SHARED_POOL_CONFIG_TIDB,
			SHARED_POOL_CONFIG_TIPROXY,
			SHARED_POOL_CONFIG_SCHEMA_MANAGER,
		}
	case ClusterType_LOGICAL_CLUSTER:
		return []string{
			LOGICAL_CLUSTER_CONFIG_TIDB,
			LOGICAL_CLUSTER_CONFIG_TIPROXY,
			LOGICAL_CLUSTER_CONFIG_DUMPLING,
		}
	}
	return []string{}
}

func (c ClusterType) GetConfigTypeFormat(configType string) Format {
	if configType == CONFIG_CENTER_INTERNAL_META_PROFILE {
		return Format_TOML
	}

	switch c {
	case ClusterType_DEDICATED_TIDB:
		switch configType {
		case DEDICATED_TIDB_CONFIG_TIDB,
			DEDICATED_TIDB_CONFIG_TIKV,
			DEDICATED_TIDB_CONFIG_PD,
			DEDICATED_TIDB_CONFIG_TIFLASH,
			DEDICATED_TIDB_CONFIG_TIFLASH_LEARNER,
			DEDICATED_TIDB_CONFIG_TICDC,
			DEDICATED_TIDB_CONFIG_TIDB_LIGHTNING,
			DEDICATED_TIDB_CONFIG_TIPROXY:
			return Format_TOML
		case
			DEDICATED_TIDB_CONFIG_RESTORE,
			DEDICATED_TIDB_CONFIG_BACKUP:
			return Format_JSON
		case DEDICATED_TIDB_CONFIG_INITSQL:
			return Format_LINES
		default:
			return Format_FORMAT_UNSPECIFIED
		}
	case ClusterType_TICDC, ClusterType_TICDC_NG:
		switch configType {
		case TICDC_CONFIG_TICDC:
			return Format_TOML
		default:
			return Format_FORMAT_UNSPECIFIED
		}
	case ClusterType_CHANGEFEED, ClusterType_CHANGEFEED_NG, ClusterType_CHANGEFEED_ESSENTIAL:
		switch configType {
		case CHANGEFEED_CONFIG_CHANGEFEED_KAFKA,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_KAFKA,
			CHANGEFEED_CONFIG_CHANGEFEED_MYSQL,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_MYSQL,
			CHANGEFEED_CONFIG_CHANGEFEED_S3,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_S3,
			CHANGEFEED_CONFIG_CHANGEFEED_GCS,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_GCS,
			CHANGEFEED_CONFIG_CHANGEFEED_SERVERLESS,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_SERVERLESS,
			CHANGEFEED_CONFIG_CHANGEFEED_PULSAR,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_PULSAR,
			CHANGEFEED_CONFIG_CHANGEFEED_AZBLOB,
			CHANGEFEED_CONFIG_CHANGEFEED_URI_AZBLOB:
			return Format_JSON
		default:
			return Format_FORMAT_UNSPECIFIED
		}
	case ClusterType_SHARED_POOL:
		switch configType {
		case SHARED_POOL_CONFIG_INITSQL:
			return Format_LINES
		case SHARED_POOL_CONFIG_TIDB_SEM:
			return Format_JSON
		default:
			return Format_TOML
		}
	case ClusterType_LOGICAL_CLUSTER:
		return Format_TOML
	default:
		return Format_FORMAT_UNSPECIFIED
	}
}

func (c ClusterType) ConfigType2Component(configType string) string {
	switch c {
	case ClusterType_DEDICATED_TIDB:
		theMap := map[string]string{
			DEDICATED_TIDB_CONFIG_TIDB:            DEDICATED_TIDB_COMPONENT_TIDB,
			DEDICATED_TIDB_CONFIG_TIKV:            DEDICATED_TIDB_COMPONENT_TIKV,
			DEDICATED_TIDB_CONFIG_PD:              DEDICATED_TIDB_COMPONENT_PD,
			DEDICATED_TIDB_CONFIG_TIFLASH:         DEDICATED_TIDB_COMPONENT_TIFLASH,
			DEDICATED_TIDB_CONFIG_TIFLASH_LEARNER: DEDICATED_TIDB_COMPONENT_TIFLASH,
			DEDICATED_TIDB_CONFIG_INITSQL:         "",
			DEDICATED_TIDB_CONFIG_TICDC:           DEDICATED_TIDB_COMPONENT_TICDC,
			DEDICATED_TIDB_CONFIG_RESTORE:         DEDICATED_TIDB_COMPONENT_RESTORE,
			DEDICATED_TIDB_CONFIG_BACKUP:          DEDICATED_TIDB_COMPONENT_BACKUP,
			DEDICATED_TIDB_CONFIG_TIDB_LIGHTNING:  DEDICATED_TIDB_COMPONENT_TIDB_LIGHTNING,
			DEDICATED_TIDB_CONFIG_TIPROXY:         DEDICATED_TIDB_COMPONENT_TIPROXY,
		}
		return theMap[configType]
	case ClusterType_TICDC, ClusterType_TICDC_NG:
		return configType
	case ClusterType_SHARED_POOL:
		theMap := map[string]string{
			SHARED_POOL_CONFIG_INITSQL:                 "",
			SHARED_POOL_CONFIG_TIKV:                    SHARED_POOL_COMPONENT_TIKV,
			SHARED_POOL_CONFIG_PD:                      SHARED_POOL_COMPONENT_PD,
			SHARED_POOL_CONFIG_TIKV_WORKER:             SHARED_POOL_COMPONENT_TIKV_WORKER,
			SHARED_POOL_CONFIG_COPROCESSOR_WORKER:      SHARED_POOL_COMPONENT_COPROCESSOR_WORKER,
			SHARED_POOL_CONFIG_TIDB_WORKER:             SHARED_POOL_COMPONENT_TIDB_WORKER,
			SHARED_POOL_CONFIG_PD_TSO:                  SHARED_POOL_COMPONENT_PD_TSO,
			SHARED_POOL_CONFIG_PD_SCHEDULING:           SHARED_POOL_COMPONENT_PD_SCHEDULING,
			SHARED_POOL_CONFIG_RESOURCE_MANAGER:        SHARED_POOL_COMPONENT_RESOURCE_MANAGER,
			SHARED_POOL_CONFIG_TIFLASH_WRITE:           SHARED_POOL_COMPONENT_TIFLASH_WRITE,
			SHARED_POOL_CONFIG_TIFLASH_LEARNER:         SHARED_POOL_COMPONENT_TIFLASH_WRITE,
			SHARED_POOL_CONFIG_TIFLASH_COMPUTE:         SHARED_POOL_COMPONENT_TIFLASH_COMPUTE,
			SHARED_POOL_CONFIG_TIFLASH_COMPUTE_LEARNER: SHARED_POOL_COMPONENT_TIFLASH_COMPUTE,
			SHARED_POOL_CONFIG_TIDB:                    SHARED_POOL_COMPONENT_TIDB,
			SHARED_POOL_CONFIG_TIPROXY:                 SHARED_POOL_COMPONENT_TIPROXY,
			SHARED_POOL_CONFIG_SCHEMA_MANAGER:          SHARED_POOL_COMPONENT_SCHEMA_MANAGER,
			SHARED_POOL_CONFIG_TIDB_SEM:                "", // todo: check belongs
			SHARED_POOL_CONFIG_TIBR_AUTOBACKUP:         SHARED_POOL_COMPONENT_TIBR_AUTOBACKUP,
			SHARED_POOL_CONFIG_TIBR_RESTORE:            SHARED_POOL_COMPONENT_TIBR_RESTORE,
			SHARED_POOL_CONFIG_TIBRGC_T2_DFSGC:         SHARED_POOL_COMPONENT_TIBRGC_T2_DFSGC,
			SHARED_POOL_CONFIG_TIBRGC_T3_ARCHIVE:       SHARED_POOL_COMPONENT_TIBRGC_T3_ARCHIVE,
			SHARED_POOL_CONFIG_CLASSIC_RESTORE:         SHARED_POOL_COMPONENT_CLASSIC_RESTORE,
		}
		return theMap[configType]
	case ClusterType_LOGICAL_CLUSTER:
		theMap := map[string]string{
			LOGICAL_CLUSTER_CONFIG_TIDB:     LOGICAL_CLUSTER_COMPONENT_TIDB,
			LOGICAL_CLUSTER_CONFIG_TIPROXY:  LOGICAL_CLUSTER_COMPONENT_TIPROXY,
			LOGICAL_CLUSTER_CONFIG_DUMPLING: LOGICAL_CLUSTER_COMPONENT_DUMPLING,
		}
		return theMap[configType]
	}
	return ""
}

func (c ClusterType) Component2ConfigTypes(component string) []string {
	switch c {
	case ClusterType_DEDICATED_TIDB:
		theMap := map[string][]string{
			DEDICATED_TIDB_COMPONENT_TIDB:                {DEDICATED_TIDB_CONFIG_TIDB},
			DEDICATED_TIDB_COMPONENT_TIKV:                {DEDICATED_TIDB_CONFIG_TIKV},
			DEDICATED_TIDB_COMPONENT_PD:                  {DEDICATED_TIDB_CONFIG_PD},
			DEDICATED_TIDB_COMPONENT_TIFLASH:             {DEDICATED_TIDB_CONFIG_TIFLASH, DEDICATED_TIDB_CONFIG_TIFLASH_LEARNER},
			DEDICATED_TIDB_COMPONENT_TICDC:               {DEDICATED_TIDB_CONFIG_TICDC},
			DEDICATED_TIDB_COMPONENT_RESTORE:             {DEDICATED_TIDB_CONFIG_RESTORE},
			DEDICATED_TIDB_COMPONENT_BACKUP:              {DEDICATED_TIDB_CONFIG_BACKUP},
			DEDICATED_TIDB_COMPONENT_COMPACT_BACKUP_BR:   {},
			DEDICATED_TIDB_COMPONENT_COMPACT_BACKUP_TIKV: {},
			DEDICATED_TIDB_COMPONENT_TIDB_LIGHTNING:      {DEDICATED_TIDB_CONFIG_TIDB_LIGHTNING},
			DEDICATED_TIDB_COMPONENT_TIPROXY:             {DEDICATED_TIDB_CONFIG_TIPROXY},
			DEDICATED_TIDB_COMPONENT_DM:                  {},
		}
		return theMap[component]
	case ClusterType_TICDC, ClusterType_TICDC_NG:
		return []string{
			component,
		}
	case ClusterType_SHARED_POOL:
		theMap := map[string][]string{
			SHARED_POOL_COMPONENT_TIKV:               {SHARED_POOL_CONFIG_TIKV},
			SHARED_POOL_COMPONENT_PD:                 {SHARED_POOL_CONFIG_PD},
			SHARED_POOL_COMPONENT_TIKV_WORKER:        {SHARED_POOL_CONFIG_TIKV_WORKER},
			SHARED_POOL_COMPONENT_COPROCESSOR_WORKER: {SHARED_POOL_CONFIG_COPROCESSOR_WORKER},
			SHARED_POOL_COMPONENT_TIDB_WORKER:        {SHARED_POOL_CONFIG_TIDB_WORKER},
			SHARED_POOL_COMPONENT_PD_TSO:             {SHARED_POOL_CONFIG_PD_TSO},
			SHARED_POOL_COMPONENT_PD_SCHEDULING:      {SHARED_POOL_CONFIG_PD_SCHEDULING},
			SHARED_POOL_COMPONENT_RESOURCE_MANAGER:   {SHARED_POOL_CONFIG_RESOURCE_MANAGER},
			SHARED_POOL_COMPONENT_TIFLASH_WRITE:      {SHARED_POOL_CONFIG_TIFLASH_WRITE, SHARED_POOL_CONFIG_TIFLASH_LEARNER},
			SHARED_POOL_COMPONENT_TIFLASH_COMPUTE:    {SHARED_POOL_CONFIG_TIFLASH_COMPUTE, SHARED_POOL_CONFIG_TIFLASH_COMPUTE_LEARNER},
			SHARED_POOL_COMPONENT_TIDB:               {SHARED_POOL_CONFIG_TIDB},
			SHARED_POOL_COMPONENT_TIPROXY:            {SHARED_POOL_CONFIG_TIPROXY},
			SHARED_POOL_COMPONENT_SCHEMA_MANAGER:     {SHARED_POOL_CONFIG_SCHEMA_MANAGER},
			SHARED_POOL_COMPONENT_TIBR_AUTOBACKUP:    {SHARED_POOL_CONFIG_TIBR_AUTOBACKUP},
			SHARED_POOL_COMPONENT_TIBR_RESTORE:       {SHARED_POOL_CONFIG_TIBR_RESTORE},
			SHARED_POOL_COMPONENT_TIBRGC_T2_DFSGC:    {SHARED_POOL_CONFIG_TIBRGC_T2_DFSGC},
			SHARED_POOL_COMPONENT_TIBRGC_T3_ARCHIVE:  {SHARED_POOL_CONFIG_TIBRGC_T3_ARCHIVE},
			SHARED_POOL_COMPONENT_CLASSIC_RESTORE:    {SHARED_POOL_CONFIG_CLASSIC_RESTORE},
		}
		return theMap[component]
	case ClusterType_LOGICAL_CLUSTER:
		theMap := map[string][]string{
			LOGICAL_CLUSTER_COMPONENT_TIDB:     {LOGICAL_CLUSTER_CONFIG_TIDB},
			LOGICAL_CLUSTER_COMPONENT_TIPROXY:  {LOGICAL_CLUSTER_CONFIG_TIPROXY},
			LOGICAL_CLUSTER_COMPONENT_DUMPLING: {LOGICAL_CLUSTER_CONFIG_DUMPLING},
		}
		return theMap[component]
	}
	return nil
}

func (c ClusterType) DictSource() ClusterType {
	switch c {
	/*
		case ClusterType_LOGICAL_CLUSTER:
			return ClusterType_SHARED_POOL
	*/
	case ClusterType_TICDC_NG:
		return ClusterType_TICDC
	case ClusterType_CHANGEFEED_NG, ClusterType_CHANGEFEED_ESSENTIAL:
		return ClusterType_CHANGEFEED
	default:
		return c
	}
}
