package encryptionkey

import (
	"context"

	globalcommonv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/common/v1"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

type Filter struct {
	Ids                []uint64
	TenantId           uint64
	ProviderName       globalcommonv1.CloudProvider_Name
	RegionName         globalcommonv1.Region_Name
	ServicePlan        globalcommonv1.ServicePlan
	ProviderIdentityId []uint64
	CustomerManaged    *bool
}

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type Repo interface {
	Load(ctx context.Context, id uint64, showDeleted bool) (*entity.EncryptionKey, bizerr.BizError)
	Create(ctx context.Context, encryptionKey *entity.EncryptionKey) bizerr.BizError

	GetDefaultEncryptionKey(ctx context.Context,
		tenantId uint64,
		regionId uint64,
		ProviderIdentityId uint64) (*entity.EncryptionKey, bizerr.BizError)

	ListEncryptionKeys(ctx context.Context, filter *Filter) ([]*entity.EncryptionKey, bizerr.BizError)
	FindByMasterKeyAndTenant(ctx context.Context, masterKey string, tenantId uint64, regionId uint64) (*entity.EncryptionKey, bizerr.BizError)
	UpdateMasterKey(ctx context.Context, id uint64, masterKey string) bizerr.BizError
}
