package region

import (
	"context"

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

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type ProviderIdentityRepo interface {
	Load(ctx context.Context, id uint64) (*entity.RegionProviderIdentity, bizerr.BizError)
	ListProviderIdentityByRegion(
		ctx context.Context,
		regionId uint64) ([]*entity.RegionProviderIdentity, bizerr.BizError)
	Save(ctx context.Context, identity *entity.RegionProviderIdentity) bizerr.BizError
	// QueryDefaultProviderIdentity queries DefaultProviderIdentity records by provider, service plan, region and tenant
	QueryDefaultProviderIdentity(
		ctx context.Context,
		providerId uint64, servicePlan string,
		regionId uint64, tenantId uint64) ([]*entity.DefaultProviderIdentity, bizerr.BizError)
	// GetProviderIdentityByIdentity gets a provider identity by region ID and identity string
	GetProviderIdentityByIdentity(ctx context.Context, regionId uint64, identity string) (*entity.RegionProviderIdentity, bizerr.BizError)
	// SaveDefaultProviderIdentity saves or updates a DefaultProviderIdentity record
	SaveDefaultProviderIdentity(ctx context.Context, defaultIdentity *entity.DefaultProviderIdentity) bizerr.BizError
	GetDefaultProviderIdentityByRegionAndTenant(
		ctx context.Context,
		providerId uint64, servicePlan string,
		regionId uint64, tenantId uint64) (*entity.DefaultProviderIdentity, bizerr.BizError)
	ListDefaultProviderIdentitiesByRegion(
		ctx context.Context,
		providerId uint64,
		regionId uint64) ([]*entity.DefaultProviderIdentity, bizerr.BizError)
	DeleteDefaultProviderIdentityByRegionAndTenant(
		ctx context.Context,
		providerId uint64,
		regionId uint64, tenantId uint64) bizerr.BizError
}
