package compat

import (
	"context"

	"go.opentelemetry.io/otel"

	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"
	clusterrepo "github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/cluster"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/region"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

var Tracer = otel.Tracer("domain.dataPlatCompat")

type Service interface {
	GetCompatCluster(
		ctx context.Context,
		req *globaldedicatedv1.GetCompatClusterRequest,
	) (*globaldedicatedv1.CompatCluster, bizerr.BizError)
	GetCompatNetwork(
		ctx context.Context,
		req *globaldedicatedv1.GetCompatNetworkRequest,
	) (*globaldedicatedv1.CompatNetwork, bizerr.BizError)
	GetCompatProvider(
		ctx context.Context,
		req *globaldedicatedv1.GetCompatProviderRequest,
	) (*globaldedicatedv1.CompatProvider, bizerr.BizError)
}

type dataPlatformCompatServiceImpl struct {
	clusterRepo     clusterrepo.Repo
	regionRepo      region.Repo
	regionServerCli regionserver.Client
	accountCli      account.Client
}

func NewService(
	clusterRepo clusterrepo.Repo,
	regionRepo region.Repo,
	regionServerCli regionserver.Client,
	accountCli account.Client,
) Service {
	return &dataPlatformCompatServiceImpl{
		clusterRepo:     clusterRepo,
		regionRepo:      regionRepo,
		regionServerCli: regionServerCli,
		accountCli:      accountCli,
	}
}
