package common

import (
	"github.com/samber/lo"

	globalcommonv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/common/v1"
	openapicommonv1beta1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/common/v1beta1"
)

func OpenApiProviderToGlobal(op openapicommonv1beta1.Region_CloudProvider) globalcommonv1.CloudProvider_Name {
	switch op {
	case openapicommonv1beta1.Region_aws:
		return globalcommonv1.CloudProvider_AWS
	case openapicommonv1beta1.Region_gcp:
		return globalcommonv1.CloudProvider_GCP
	case openapicommonv1beta1.Region_azure:
		return globalcommonv1.CloudProvider_AZURE
	case openapicommonv1beta1.Region_alicloud:
		return globalcommonv1.CloudProvider_ALICLOUD
	default:
		return globalcommonv1.CloudProvider_NAME_UNSPECIFIED
	}
}

func OpenApiProviderToGlobalBatch(ops []openapicommonv1beta1.Region_CloudProvider) []globalcommonv1.CloudProvider_Name {
	return lo.Map(ops, func(item openapicommonv1beta1.Region_CloudProvider, index int) globalcommonv1.CloudProvider_Name {
		return OpenApiProviderToGlobal(item)
	})
}

func GlobalProviderToOpenApi(gp globalcommonv1.CloudProvider_Name) openapicommonv1beta1.Region_CloudProvider {
	switch gp {
	case globalcommonv1.CloudProvider_AWS:
		return openapicommonv1beta1.Region_aws
	case globalcommonv1.CloudProvider_GCP:
		return openapicommonv1beta1.Region_gcp
	case globalcommonv1.CloudProvider_AZURE:
		return openapicommonv1beta1.Region_azure
	case globalcommonv1.CloudProvider_ALICLOUD:
		return openapicommonv1beta1.Region_alicloud
	default:
		return openapicommonv1beta1.Region_CLOUD_PROVIDER_UNSPECIFIED
	}
}

func GlobalProviderToOpenApiBatch(gps []globalcommonv1.CloudProvider_Name) []openapicommonv1beta1.Region_CloudProvider {
	return lo.Map(gps, func(item globalcommonv1.CloudProvider_Name, index int) openapicommonv1beta1.Region_CloudProvider {
		return GlobalProviderToOpenApi(item)
	})
}
