package service

import (
	"github.com/tidbcloud/cluster-service-ng/pkg/runtime/actions"
	"github.com/tidbcloud/cluster-service-ng/pkg/template/render"
)

func SafeRegisterActions(actionLib *actions.ActionLibrary, templateLib *render.TemplateLibrary) {
	cloudK8sEndpoint := "aws-eks-fake-endpoint"
	tidbOperatorEndpoint := "tidb-operator-endpoint"

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create-cluster-kms:v1",
		},
		Action:           actions.K8sActionTypeSet,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "kms-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create-cluster-node-role:v1",
		},
		Action:           actions.K8sActionTypeSet,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "node-role-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create-tidb-node-group:v1",
		},
		Action:           actions.K8sActionTypeSet,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "tidb-node-group-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create-tikv-node-group:v1",
		},
		Action:           actions.K8sActionTypeSet,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "tikv-node-group-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(
		&actions.MockK8sAction{
			MockActionBase: &actions.MockActionBase{
				ActionName: "create-pd-node-group:v1",
			},
			Action:           actions.K8sActionTypeSet,
			K8sEndpoint:      cloudK8sEndpoint,
			YamlTemplateName: "pd-node-group-cr:v1",
			Templates:        templateLib,
		})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create-tiflash-node-group:v1",
		},
		Action:           actions.K8sActionTypeSet,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "tiflash-node-group-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create-s3-bucket:v1",
		},
		Action:           actions.K8sActionTypePatch,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "s3-bucket-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create-cluster-storage-class:v1",
		},
		Action:           actions.K8sActionTypePatch,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "cluster-storage-class-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "gen-tidb-server-cert:v1",
		},
		Action:           actions.K8sActionTypePatch,
		K8sEndpoint:      cloudK8sEndpoint,
		YamlTemplateName: "tidb-server-cert-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockK8sAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "create cluster:v1",
		},
		Action:           actions.K8sActionTypePatch,
		K8sEndpoint:      tidbOperatorEndpoint,
		YamlTemplateName: "shared-pool-cr:v1",
		Templates:        templateLib,
	})

	actionLib.SafeRegister(&actions.MockBuiltinAction{
		MockActionBase: &actions.MockActionBase{
			ActionName: "shared-pool-initializer:v1",
		},
		FunctionName: "InitClusterAfterCreated:v1",
	})
}
