package migrationprecheck

import (
	"context"

	globaldedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/adapter/clusterproxy"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/adapter/regionserver"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/adapter/remoteencryptor"
	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"
)

// Service runs one Dedicated to Premium compatibility check at a time.
type Service interface {
	RunDedicatedToPremiumCompatibilityCheck(
		ctx context.Context,
		req *globaldedicatedv1.RunDedicatedToPremiumCompatibilityCheckRequest,
	) (*globaldedicatedv1.RunDedicatedToPremiumCompatibilityCheckResponse, bizerr.BizError)
}

type service struct {
	clusterRepo          clusterrepo.Repo
	regionRepo           region.Repo
	regionServerCli      regionserver.Client
	clusterProxyProvider clusterproxy.Provider
	encryptor            remoteencryptor.Client
}

func NewService(
	clusterRepo clusterrepo.Repo,
	regionRepo region.Repo,
	regionServerCli regionserver.Client,
	clusterProxyProvider clusterproxy.Provider,
	encryptor remoteencryptor.Client,
) Service {
	return &service{
		clusterRepo:          clusterRepo,
		regionRepo:           regionRepo,
		regionServerCli:      regionServerCli,
		clusterProxyProvider: clusterProxyProvider,
		encryptor:            encryptor,
	}
}
