package tidbxregion

import (
	openapidedicatedv1beta1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/dedicated/v1beta1"
	openapingv1beta2 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/nextgen/v1beta2"
	openapiserverlessv1beta1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/serverless/v1beta1"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/account"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/dedicatedglobal"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/nextgenglobal"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/serverlessglobal"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/repository"
)

type RegionServer struct {
	clusterRepo repository.ClusterRepository

	openAPIDedicatedRegionServer   openapidedicatedv1beta1.RegionServiceServer
	openAPIServerlessClusterServer openapiserverlessv1beta1.ClusterServiceServer
	openAPINextgenRegionServer     openapingv1beta2.RegionServiceServer

	accountCli account.Client

	dedicatedCli  dedicatedglobal.DedicatedGlobal
	nextgenCli    nextgenglobal.NextGenGlobal
	serverlessCli serverlessglobal.ServerlessGlobal
}

func NewRegionServer(
	clusterRepo repository.ClusterRepository,

	openAPIDedicatedRegionServer openapidedicatedv1beta1.RegionServiceServer,
	openAPIServerlessClusterServer openapiserverlessv1beta1.ClusterServiceServer,
	openAPINextgenRegionServer openapingv1beta2.RegionServiceServer,
	accountCli account.Client,
	dedicatedCli dedicatedglobal.DedicatedGlobal,
	nextgenCli nextgenglobal.NextGenGlobal,
	serverlessCli serverlessglobal.ServerlessGlobal,
) *RegionServer {
	return &RegionServer{
		clusterRepo:                    clusterRepo,
		openAPIDedicatedRegionServer:   openAPIDedicatedRegionServer,
		openAPIServerlessClusterServer: openAPIServerlessClusterServer,
		openAPINextgenRegionServer:     openAPINextgenRegionServer,
		accountCli:                     accountCli,
		dedicatedCli:                   dedicatedCli,
		nextgenCli:                     nextgenCli,
		serverlessCli:                  serverlessCli,
	}
}
