package entity

import (
	apiv1 "github.com/tidbcloud/cluster-service-ng/api/cluster-service-ng/v1beta"
	"github.com/tidbcloud/cluster-service-ng/config"
)

const (
	PremiumServicePlan   = "premium"
	EssentialServicePlan = "essential"
)

// ResolveServicePlan returns the service plan value used for metering and
// cost/service-type tags. Keep this logic aligned with metering metadata so
// dataplane-manager resource tags use the same plan classification that CSNG
// reports for billing.
func ResolveServicePlan(sharedPool *SharedPool, capacityMode apiv1.CapacityMode, configuredPlan string) string {
	if capacityMode == apiv1.CapacityMode_TOPOLOGY_DRIVEN {
		return config.PremiumReservedMeteringPlan
	}
	if configuredPlan != "" && configuredPlan != PremiumServicePlan {
		return configuredPlan
	}
	if sharedPool != nil && HasSharedTiProxy(sharedPool) {
		return EssentialServicePlan
	}
	return PremiumServicePlan
}
