package common

import (
	"github.com/samber/lo"
	coreapi "github.com/tidbcloud/core-svc/idl/pbgen/proto/core"
	"go.buf.build/protocolbuffers/go/linuxgit/tidbcloud/base"

	globaldedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
)

func PagerCoreToGlobal(p *base.Pager) *globaldedicatedv1.Pager {
	if p == nil {
		return nil
	}
	return &globaldedicatedv1.Pager{
		Page:     p.GetPage(),
		PageSize: p.GetPageSize(),
	}
}

func SortersCoreToGlobal(s []*base.Sorter) []*globaldedicatedv1.Sorter {
	return lo.Map(s, func(item *base.Sorter, _ int) *globaldedicatedv1.Sorter {
		return SorterCoreToGlobal(item)
	})
}

func SorterCoreToGlobal(s *base.Sorter) *globaldedicatedv1.Sorter {
	if s == nil {
		return nil
	}
	var sort globaldedicatedv1.Sorter_Sort
	switch s.GetSort() {
	case base.Sort_SORT_ASC:
		sort = globaldedicatedv1.Sorter_ASC
	case base.Sort_SORT_DESC:
		sort = globaldedicatedv1.Sorter_DESC
	}
	return &globaldedicatedv1.Sorter{
		OrderBy: s.GetOrderBy(),
		Sort:    sort,
	}
}

func ComponentTypeCoreToGlobalCoreApi(ct coreapi.ComponentType) globaldedicatedv1.ComponentType {
	switch ct {
	case coreapi.ComponentType_COMPONENT_TYPE_TIDB:
		return globaldedicatedv1.ComponentType_TIDB
	case coreapi.ComponentType_COMPONENT_TYPE_TIKV:
		return globaldedicatedv1.ComponentType_TIKV
	case coreapi.ComponentType_COMPONENT_TYPE_TIFLASH:
		return globaldedicatedv1.ComponentType_TIFLASH
	case coreapi.ComponentType_COMPONENT_TYPE_PD:
		return globaldedicatedv1.ComponentType_PD
	case coreapi.ComponentType_COMPONENT_TYPE_TIPROXY:
		return globaldedicatedv1.ComponentType_TIPROXY
	default:
		return globaldedicatedv1.ComponentType_COMPONENT_TYPE_UNSPECIFIED
	}
}

func ComponentTypeGlobalCoreApiToCore(ct globaldedicatedv1.ComponentType) coreapi.ComponentType {
	switch ct {
	case globaldedicatedv1.ComponentType_TIDB:
		return coreapi.ComponentType_COMPONENT_TYPE_TIDB
	case globaldedicatedv1.ComponentType_TIKV:
		return coreapi.ComponentType_COMPONENT_TYPE_TIKV
	case globaldedicatedv1.ComponentType_TIFLASH:
		return coreapi.ComponentType_COMPONENT_TYPE_TIFLASH
	case globaldedicatedv1.ComponentType_PD:
		return coreapi.ComponentType_COMPONENT_TYPE_PD
	default:
		return coreapi.ComponentType_COMPONENT_TYPE_UNSPECIFIED
	}
}
