package serverless

import (
	observabilitypingcapcomv1 "github.com/tidbcloud/observability/api/regionalserver/resourceworker/v1"
	"github.com/tidbcloud/observability/pkg/common/constants"
	"github.com/tidbcloud/observability/pkg/common/deploy"
	"github.com/tidbcloud/observability/pkg/resourceworker/controllers/serverless/task"
	commontask "github.com/tidbcloud/observability/pkg/resourceworker/controllers/serverless/task/common"
	parenttask "github.com/tidbcloud/observability/pkg/resourceworker/controllers/serverless/task/parent"
)

func GetO11yTasks(r *ServerlessClusterReconciler, c *task.Context) []deploy.Task {
	if inParentCluster(c.Cluster) {
		return GetServerlessParentTasks(r, c)
	}
	return GetServerlessChildTasks(r, c)
}

func GetServerlessChildTasks(r *ServerlessClusterReconciler, c *task.Context) (tasks []deploy.Task) {
	return []deploy.Task{
		commontask.NewGuardian(c),
		commontask.NewVMRule(c),
	}
}

func GetServerlessParentTasks(r *ServerlessClusterReconciler, c *task.Context) []deploy.Task {
	tasks := []deploy.Task{
		commontask.NewGuardian(c),
		parenttask.NewExternalService(c),
		parenttask.NewIngress(c),
		commontask.NewVMRule(c),
		parenttask.NewVMAlert(c),
		parenttask.NewEndpointService(c),
	}
	//parent task need create
	// ingress,service,endpointservice,vmalert
	return tasks
}

func inParentCluster(cluster *observabilitypingcapcomv1.Cluster) bool {
	return cluster.Spec.VictoriaAccount.SupportServerless && cluster.Annotations[constants.AnnotationShareMode] == string(constants.SHARED)
}
