package region

import (
	"context"

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

type Filter struct {
	CloudProvider entity.CloudProviderName
	RegionId      entity.RegionName
	LogicalName   string
	ServicePlan   entity.ServicePlan
	TenantId      uint64
	State         string

	DBRegionIds []uint64
	ShowDeleted bool
}

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type Repo interface {
	SelectRegion(ctx context.Context, filter Filter) (*entity.Region, bizerr.BizError)
	Get(ctx context.Context, regionId uint64) (*entity.Region, bizerr.BizError)
	GetByLogicalName(ctx context.Context, logicalName string) (*entity.Region, bizerr.BizError)
	ListRegions(ctx context.Context, filter Filter) ([]*entity.Region, bizerr.BizError)
	ListCloudProviders(ctx context.Context, filter Filter) ([]*entity.CloudProvider, bizerr.BizError)

	GetCloudProviderById(
		ctx context.Context,
		cloudProviderId entity.CloudProviderName,
		servicePlan entity.ServicePlan,
	) (*entity.CloudProvider, 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

	UpsertRegionOpsAuditLogSetting(ctx context.Context, setting *entity.RegionOpsAuditLogSetting) bizerr.BizError
}
