package vpc

import (
	globaldedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/adapter/account"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/adapter/regionserver"
	cidrrepo "github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/cidr"
	endpointrepo "github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/endpoint"
	regionrepo "github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/region"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/service/vpc"
)

func NewServer(
	vpcService vpc.Service,
	updateCidrSvc vpc.UpdateCidrSvc,
	deleteCidrSvc vpc.DeleteCidrSvc,
	cidrRepo cidrrepo.Repo,
	regionRepo regionrepo.Repo,
	vpcPeeringRepo endpointrepo.VpcPeeringRepo,
	regionServerCli regionserver.Client,
	accountCli account.Client,
) globaldedicatedv1.VpcServiceServer {
	return &server{
		vpcService:      vpcService,
		updateCidrSvc:   updateCidrSvc,
		deleteCidrSvc:   deleteCidrSvc,
		cidrRepo:        cidrRepo,
		regionRepo:      regionRepo,
		vpcPeeringRepo:  vpcPeeringRepo,
		regionServerCli: regionServerCli,
		accountCli:      accountCli,
	}
}

type server struct {
	vpcService    vpc.Service
	updateCidrSvc vpc.UpdateCidrSvc
	deleteCidrSvc vpc.DeleteCidrSvc

	cidrRepo       cidrrepo.Repo
	regionRepo     regionrepo.Repo
	vpcPeeringRepo endpointrepo.VpcPeeringRepo

	regionServerCli regionserver.Client
	accountCli      account.Client
}
