package keyspace

import (
	"context"
	"fmt"

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

const (
	keyspacePoolFinalizer = "keyspace-pool.tidbcloud.com/finalizer"
)

func (r *Reconciler) ensureFinalizer(ctx context.Context, obj client.Object) error {
	if !controllerutil.ContainsFinalizer(obj, keyspacePoolFinalizer) {
		logger := log.FromContext(ctx)
		logger.Info("Add Keyspace finalizer")

		controllerutil.AddFinalizer(obj, keyspacePoolFinalizer)

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

	return nil
}

func (r *Reconciler) removeFinalizer(ctx context.Context, obj client.Object) error {
	if controllerutil.ContainsFinalizer(obj, keyspacePoolFinalizer) {
		logger := log.FromContext(ctx)
		logger.Info("Remove Keyspace finalizer")

		controllerutil.RemoveFinalizer(obj, keyspacePoolFinalizer)

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

	return nil
}
