package namer

import (
	"strings"

	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"sigs.k8s.io/controller-runtime/pkg/client"

	"github.com/tidbcloud/infra-provider/regional-server/pkg/consts"
)

func GetNodeZoneFromLabels(labels map[string]string) string {
	if labels == nil {
		return ""
	}
	return labels[consts.ZoneLabelKey]
}

func GetNodeInstanceTypeFromLabels(labels map[string]string) string {
	if labels == nil {
		return ""
	}
	return labels[corev1.LabelInstanceTypeStable]
}

func GVKString(gvk *schema.GroupVersionKind) string {
	if len(gvk.Group) > 0 {
		return gvk.Group + "." + gvk.Version + "." + strings.ToLower(gvk.Kind)
	}

	return gvk.Version + "." + strings.ToLower(gvk.Kind)
}

func NewOwnerLabels(owner client.Object, labels map[string]string) map[string]string {
	gvk := owner.GetObjectKind().GroupVersionKind()
	namespace := owner.GetNamespace()
	name := owner.GetName()
	uid := string(owner.GetUID())

	if labels == nil {
		labels = map[string]string{}
	}

	labels[consts.LabelKeyOwnedBy] = GVKString(&gvk)
	labels[consts.LabelKeyNamespace] = namespace
	labels[consts.LabelKeyName] = name
	labels[consts.LabelKeyUID] = uid

	return labels
}
