package utils

import (
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/labels"
	"sigs.k8s.io/controller-runtime/pkg/client"

	"github.com/tidbcloud/infra-provider/pkg/namer"
	"github.com/tidbcloud/infra-provider/regional-server/api/v1alpha1"
)

func IsPaused(o metav1.Object) bool {
	return o.GetAnnotations()[v1alpha1.AnnotationKeyReconciliationPaused] == "true"
}

func Pause(o metav1.Object) {
	anno := o.GetAnnotations()
	if anno == nil {
		anno = map[string]string{}
	}
	anno[v1alpha1.AnnotationKeyReconciliationPaused] = "true"
	o.SetAnnotations(anno)
}

func Unpause(o metav1.Object) {
	anno := o.GetAnnotations()
	if anno == nil {
		return
	}
	delete(anno, v1alpha1.AnnotationKeyReconciliationPaused)
	o.SetAnnotations(anno)
}

func GetAdminNodesLabelSelector(appBox *v1alpha1.APPBox) client.MatchingLabelsSelector {
	ls := client.MatchingLabelsSelector{
		Selector: labels.SelectorFromSet(map[string]string{
			namer.LegacyNetworkNamespaceSelectorKey: appBox.Namespace,
			namer.AppBoxSelectorKey:                 appBox.Name,
		}),
	}
	if appBox.Labels[v1alpha1.IsLegacyKey] == "true" {
		nsPrefix := appBox.Labels[v1alpha1.TagEnvironmentKey]
		if nsPrefix == "dev" {
			nsPrefix = "nightly-ms"
		}

		ls = client.MatchingLabelsSelector{
			Selector: labels.SelectorFromSet(map[string]string{
				namer.LegacyNetworkNamespaceSelectorKey: nsPrefix + "-" + appBox.Labels[v1alpha1.TagProjectKey],
				namer.LegacyNetworkSelectorKey:          appBox.Spec.Provider + "-" + appBox.Spec.Region,
			}),
		}
	}
	return ls
}
