package commontasks

import (
	"context"
	"strconv"

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

	"github.com/tidbcloud/observability/agent-control-server/pkg/consts"
	"github.com/tidbcloud/observability/agent-control-server/pkg/deploy"
	"github.com/tidbcloud/observability/agent-control-server/pkg/reconciler"
	"github.com/tidbcloud/observability/agent-control-server/pkg/util"
)

type UpdateVersionTask struct {
	*reconciler.BaseTask[any]
	agent   client.Object
	version string
	cm      deploy.ClusterMeta
}

func NewUpdateVersionTask(agent client.Object, version int, cm deploy.ClusterMeta) *UpdateVersionTask {
	return &UpdateVersionTask{
		BaseTask: &reconciler.BaseTask[any]{},
		agent:    agent,
		version:  strconv.Itoa(version),
		cm:       cm,
	}
}

func (t *UpdateVersionTask) Name() string {
	return "UpdateVersion"
}

func (t *UpdateVersionTask) ClusterMeta() deploy.ClusterMeta {
	return t.cm
}

func (t *UpdateVersionTask) Create(ctx context.Context) deploy.Result {
	util.SetAnnotation(t.agent, consts.AnnotationKeyO11yVersion, t.version)
	return deploy.Done()
}
