package region

import (
	"context"

	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

type Filter struct {
	CloudProviderNames []entity.CloudProviderName
	RegionNames        []entity.RegionName
	OnlyActive         bool
}

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type Repo interface {
	ListAllCloudProviders(ctx context.Context, orgId uint64) ([]*entity.CloudProvider, bizerr.BizError)

	GetCloudProviderById(
		ctx context.Context,
		cloudProviderID entity.CloudProviderName,
		orgId uint64,
	) (*entity.CloudProvider, bizerr.BizError)

	ListRegions(ctx context.Context, orgId uint64, filter *Filter) ([]*entity.Region, bizerr.BizError)

	GetRegionByLogicalName(ctx context.Context, logicalName string) (*entity.Region, bizerr.BizError)

	SelectRegionById(ctx context.Context, regionId entity.RegionName, orgId uint64) (*entity.Region, bizerr.BizError)

	SaveCloudProvider(ctx context.Context, cloudProvider *entity.CloudProvider) bizerr.BizError

	SaveRegion(ctx context.Context, region *entity.Region) bizerr.BizError

	DeleteRegionByLogicalName(ctx context.Context, logicalName string) bizerr.BizError
}
