package spu

import (
	"context"

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

type SkuFilter struct {
	Component  globaldedicatedv1.ComponentType
	Provider   globalcommonv1.CloudProvider_Name
	Components []globaldedicatedv1.ComponentType
	Providers  []globalcommonv1.CloudProvider_Name
	SpuId      *uint64
}

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
type SkuRepo interface {
	Query(ctx context.Context, filter *SkuFilter) ([]*entity.Sku, bizerr.BizError)
	Save(ctx context.Context, sku *entity.Sku) (uint, bizerr.BizError)
	LoadByKeys(ctx context.Context, keys []string) (map[string]*entity.Sku, bizerr.BizError)
	QuerySpuMappings(ctx context.Context, spuIds []uint64) (map[uint64][]*entity.SpuMapping, bizerr.BizError)
	Delete(ctx context.Context, id uint64) bizerr.BizError
	Get(ctx context.Context, id uint64) (*entity.Sku, bizerr.BizError)
}
