package tidbpool

import (
	"context"
	"crypto/sha1"
	"encoding/hex"

	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

const (
	revisionLen = 12

	serverlessTidbConfig = "serverless-tidb-config"
)

func (tp *tidbPool) genRevision(ctx context.Context, tidbPod *corev1.Pod) (string, error) {
	h := sha1.New()

	podByte, err := tidbPod.Marshal()
	if err != nil {
		return "", err
	}
	h.Write(podByte)

	serverlessTidbConfigCm := &corev1.ConfigMap{}
	if err := tp.client.Get(ctx,
		client.ObjectKey{
			Name:      serverlessTidbConfig,
			Namespace: tp.poolNamespace,
		}, serverlessTidbConfigCm); err != nil {
		return "", err
	}
	serverlessTidbConfigCm.ObjectMeta = metav1.ObjectMeta{}
	serverlessTidbConfigCm.Immutable = nil
	cmByte, err := serverlessTidbConfigCm.Marshal()
	if err != nil {
		return "", err
	}
	h.Write(cmByte)

	return hex.EncodeToString(h.Sum(nil))[:revisionLen], nil
}
