package tidbscaler

import (
	"fmt"

	"github.com/tidbcloud/aws-shared-provider/pkg/types"
	corev1 "k8s.io/api/core/v1"
	apitypes "k8s.io/apimachinery/pkg/types"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

func (ts *TidbScaler) Lock() {
	tidbServerPodTemplateCm := &corev1.ConfigMap{}
	if err := ts.client.Get(ts.ctx,
		client.ObjectKey{
			Name:      types.TidbServerPodTemplateCm,
			Namespace: ts.pool.Namespace(),
		}, tidbServerPodTemplateCm); err != nil {
		ts.Error(err, "Lock Get TidbServerPodTemplateCm")
		return
	}

	if tidbServerPodTemplateCm.Annotations[types.AnnoTidbScalerLock] == "" {
		data := fmt.Sprintf(`{"metadata":{"annotations":{"%s":"%s"}}}`, types.AnnoTidbScalerLock, "true")
		if err := ts.client.Patch(ts.ctx, tidbServerPodTemplateCm,
			client.RawPatch(apitypes.MergePatchType, []byte(data))); err != nil {
			ts.Error(err, "Lock Patch TidbServerPodTemplateCm")
			return
		}
	}
}
