package service

import (
	"github.com/tidbcloud/cluster-service-ng/pkg/runtime/dag"
)

func SafeRegisterLogicPlans(plans *dag.Plans) {
	createCluster := plans.NewPlanWithRootNode(createClusterPlanName)

	createSharedPool := createCluster.SafeAddDependNode("create-shared-pool:v1")
	createSharedPool.SafeAddDependNodes(
		"create-cluster-kms:v1",
		"create-cluster-node-role:v1",
		"create-tidb-node-group:v1",
		"create-tikv-node-group:v1",
		"create-pd-node-group:v1",
		"create-tiflash-node-group:v1")
	createSharedPool.SafeAddDependNode("create-s3-bucket:v1").
		SafeAddDependNode("create-cluster-kms:v1")
	createSharedPool.SafeAddDependNode("create-cluster-storage-class:v1").
		SafeAddDependNode("create-cluster-kms:v1")
	createSharedPool.SafeAddDependNode("gen-tidb-server-cert:v1")
	createSharedPool.SafeAddDependNode("tidb-operator:create-cluster:v1").
		SafeAddDependNodes(
			"create-tidb-node-group:v1",
			"create-tikv-node-group:v1",
			"create-pd-node-group:v1",
			"create-tiflash-node-group:v1",
			"create-s3-bucket:v1",
			"create-cluster-storage-class:v1",
			"gen-tidb-server-cert:v1")
	createSharedPool.SafeAddDependNode("shared-pool-initializer:v1").
		SafeAddDependNode("tidb-operator:create-cluster:v1")

	createTiKVWorker := createCluster.SafeAddDependNode("create-tikv-worker:v1")
	createTiKVWorker.SafeAddDependNode("create-shared-pool:v1")
	createTiKVWorker.SafeAddDependNode("create-tikv-worker-node-group:v1")
	createTiKVWorker.SafeAddDependNode("create-tikv-worker-deployment:v1").
		SafeAddDependNode("create-tikv-worker-node-group:v1")
	createTiKVWorker.SafeAddDependNode("create-tikv-worker-svc:v1").
		SafeAddDependNode("create-tikv-worker-deployment:v1")

	createCopWorker := createCluster.SafeAddDependNode("create-cop-worker:v1")
	createCopWorker.SafeAddDependNode("create-shared-pool:v1")
	createCopWorker.SafeAddDependNode("create-cop-worker-node-group:v1")
	createCopWorker.SafeAddDependNode("create-cop-worker-deployment:v1").
		SafeAddDependNode("create-cop-worker-node-group:v1")
	createCopWorker.SafeAddDependNode("create-cop-worker-svc:v1").
		SafeAddDependNode("create-cop-worker-deployment:v1")

	createCluster.SafeAddDependNode("create-cluster-agent:v1").
		SafeAddDependNode("create-shared-pool:v1")

	createCluster.SafeAddDependNode("create-tidb-lb:v1").
		SafeAddDependNode("create-shared-pool:v1")
}
