package noderecover

import (
	"context"

	"github.com/tidbcloud/aws-shared-provider/pkg/metrics"
	"github.com/tidbcloud/aws-shared-provider/pkg/types"
	"github.com/tidbcloud/aws-shared-provider/pkg/utils/kubeapi"
	"github.com/tidbcloud/aws-shared-provider/pkg/utils/labels"
	corev1 "k8s.io/api/core/v1"
	ctrl "sigs.k8s.io/controller-runtime"
)

func (r *Reconciler) Recover(ctx context.Context, node *corev1.Node) (ctrl.Result, error) {
	if err := kubeapi.UpdateNode(ctx, r.Client, func() *corev1.Node {
		delete(node.Annotations, nodeRecoverCheckTimestamp)
		delete(node.Annotations, nodeRecoverCheckResult)
		delete(node.Annotations, types.AnnoNodeForceEvictTimestamp)
		node.Spec.Unschedulable = false
		return node
	}); err != nil {
		return ctrl.Result{}, err
	}

	r.Recorder.Eventf(node, corev1.EventTypeNormal, "RecoverNode", "Recover node %s", node.Name)
	metrics.RecoverCounter.WithLabelValues(node.Name, node.Labels[labels.ServerlessNodeGroupLabelKey]).Inc()
	return ctrl.Result{}, nil
}
