package vpc

import (
	"go.opentelemetry.io/otel"

	openapidedicatedv1beta1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/dedicated/v1beta1"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/dedicatedglobal"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/adapter/eventbus"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/repository"
	dedicateclusersvc "github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/service/dedicated/cluster"
)

var tracer = otel.Tracer("App.Dedicated.VPC")

type serverImpl struct {
	dedicatedCli       dedicatedglobal.DedicatedGlobal
	dedicateClusterSvc dedicateclusersvc.Service
	customStatusRepo   repository.CustomStatusRepository
	auditLogSender     eventbus.ConsoleAuditLogSender
}

func NewServer(
	dedicatedCli dedicatedglobal.DedicatedGlobal,
	dedicateClusterSvc dedicateclusersvc.Service,
	customStatusRepo repository.CustomStatusRepository,
	auditLogSender eventbus.ConsoleAuditLogSender,
) openapidedicatedv1beta1.NetworkContainerServiceServer {
	return &serverImpl{
		dedicatedCli:       dedicatedCli,
		dedicateClusterSvc: dedicateClusterSvc,
		customStatusRepo:   customStatusRepo,
		auditLogSender:     auditLogSender,
	}
}
