package task

import (
	"context"

	"github.com/tidbcloud/eks-provider/pkg/deploy"
	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

const finalizer = "network.cloud.pingcap.com/finalizer"

// Finalizer adds and removes the finalizer of the network.
type Finalizer struct {
	*BaseTask
}

func NewFinalizer(ctx *Context) *Finalizer {
	return &Finalizer{BaseTask: &BaseTask{Context: ctx}}
}

func (t *Finalizer) Name() string {
	return "Finalizer"
}

func (t *Finalizer) Create(ctx context.Context) deploy.Result {
	if !controllerutil.ContainsFinalizer(t.Network, finalizer) {
		controllerutil.AddFinalizer(t.Network, finalizer)
	}
	return deploy.FromError(nil)
}

func (t *Finalizer) PostDelete(ctx context.Context) deploy.Result {
	if t.err == nil {
		controllerutil.RemoveFinalizer(t.Network, finalizer)
	}
	return deploy.FromError(nil)
}
