package cluster

import (
	"fmt"

	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

const (
	clusterFinalizer = "cluster.tidbcloud.com/finalizer"
)

func (r *reconcileContext) ensureFinalizer() error {
	if r.cluster.DeletionTimestamp == nil && !controllerutil.ContainsFinalizer(r.cluster, clusterFinalizer) {
		r.Info("Add Cluster finalizer")

		controllerutil.AddFinalizer(r.cluster, clusterFinalizer)

		if err := r.InfraClient.Update(r.ctx, r.cluster); err != nil {
			return fmt.Errorf("add finalizer for cluster failed: %w", err)
		}
	}

	return nil
}

func (r *reconcileContext) tryRemoveFinalizer() error {
	if r.cluster.DeletionTimestamp != nil && controllerutil.ContainsFinalizer(r.cluster, clusterFinalizer) {
		r.Info("Remove Cluster finalizer")

		controllerutil.RemoveFinalizer(r.cluster, clusterFinalizer)

		if err := r.InfraClient.Update(r.ctx, r.cluster); err != nil {
			return fmt.Errorf("remove finalizer for cluster failed: %w", err)
		}
	}

	return nil
}
