package dumpling

import (
	"context"

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

	"github.com/tidbcloud/eks-provider/controllers/dumpling/task"
	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	"github.com/tidbcloud/infra-provider/pkg/deploy"
	"github.com/tidbcloud/infra-provider/pkg/o11y/tracing"
)

func updateCreate(ctx context.Context, task *task.Context, results []deploy.Result) (res ctrl.Result, err error) {
	var retriableErr error
	res, err, retriableErr = deploy.MinRequeue(results)
	if retriableErr != nil {
		log.FromContext(ctx).Info("retriable error", "error", retriableErr)
	}

	if e := update(ctx, task.Local, task.Dumpling); e != nil {
		return res, e
	}
	return res, err
}

func updateDelete(ctx context.Context, task *task.Context, results []deploy.Result) (res ctrl.Result, err error) {
	var retriableErr error
	res, err, retriableErr = deploy.MinRequeue(results)
	if retriableErr != nil {
		log.FromContext(ctx).Info("retriable error", "error", retriableErr)
	}

	if e := update(ctx, task.Local, task.Dumpling); e != nil {
		return res, e
	}
	return res, err
}

func update(ctx context.Context, cli client.Client, Dumpling *cloudv1.Dumpling) error {
	tracing.InjectTraceContext(ctx, Dumpling)

	return cli.Status().Update(ctx, Dumpling)
}
