package cvt

import (
	ccproto "github.com/tidbcloud/config-center/proto/config_center"
	ccent "github.com/tidbcloud/devops/entity/cloudconfig"
	dedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
)

type toMgmt struct{}
type fromMgmt struct{}

func (c toMgmt) ConfigType(file string) dedicatedv1.ComponentType {
	m := map[string]dedicatedv1.ComponentType{
		ccproto.DEDICATED_TIDB_CONFIG_TIDB:            dedicatedv1.ComponentType_TIDB,
		ccproto.DEDICATED_TIDB_CONFIG_TIKV:            dedicatedv1.ComponentType_TIKV,
		ccproto.DEDICATED_TIDB_CONFIG_PD:              dedicatedv1.ComponentType_PD,
		ccproto.DEDICATED_TIDB_CONFIG_TIFLASH:         dedicatedv1.ComponentType_TIFLASH,
		ccproto.DEDICATED_TIDB_CONFIG_TIFLASH_LEARNER: dedicatedv1.ComponentType_TIFLASH_LEARNER,
		ccproto.DEDICATED_TIDB_CONFIG_TIPROXY:         dedicatedv1.ComponentType_TIPROXY,
	}
	t, exist := m[file]
	if !exist {
		return dedicatedv1.ComponentType_COMPONENT_TYPE_UNSPECIFIED
	}
	return t
}
func (c toMgmt) Component(comp string) dedicatedv1.ComponentType {
	m := map[string]dedicatedv1.ComponentType{
		ccproto.DEDICATED_TIDB_COMPONENT_TIDB:    dedicatedv1.ComponentType_TIDB,
		ccproto.DEDICATED_TIDB_COMPONENT_TIKV:    dedicatedv1.ComponentType_TIKV,
		ccproto.DEDICATED_TIDB_COMPONENT_PD:      dedicatedv1.ComponentType_PD,
		ccproto.DEDICATED_TIDB_COMPONENT_TIFLASH: dedicatedv1.ComponentType_TIFLASH,
		ccproto.DEDICATED_TIDB_COMPONENT_TIPROXY: dedicatedv1.ComponentType_TIPROXY,
	}
	t, exist := m[comp]
	if !exist {
		return dedicatedv1.ComponentType_COMPONENT_TYPE_UNSPECIFIED
	}
	return t
}

func (c toMgmt) ApplyPolicy(e ccent.ParameterApplyPolicy) dedicatedv1.ClusterApplyMask_Strategy {
	m := map[ccent.ParameterApplyPolicy]dedicatedv1.ClusterApplyMask_Strategy{
		ccent.ParameterApplyPolicyHotReload:        dedicatedv1.ClusterApplyMask_HOT_RELOAD,
		ccent.ParameterApplyPolicyRestart:          dedicatedv1.ClusterApplyMask_ROLLING_RESTART,
		ccent.ParameterApplyPolicyEnsureUpdateToTC: dedicatedv1.ClusterApplyMask_ENSURE_UPDATE_TO_TC,
	}
	t, exist := m[e]
	if !exist {
		return dedicatedv1.ClusterApplyMask_STRATEGY_UNSPECIFIED
	}
	return t
}
