package export

import (
	"context"

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

// QueryExportsFilter filters for listing exports.
type QueryExportsFilter struct {
	ClusterIds []string
	States     []schema.ExportState
}

//go:generate go run go.uber.org/mock/mockgen@latest -source=$GOFILE -package=mock_$GOPACKAGE -destination=./mock_$GOPACKAGE/mock_$GOFILE
//revive:disable-next-line exported
type ExportRepo interface {
	Create(ctx context.Context, export *entity.Export) bizerr.BizError
	Save(ctx context.Context, export *entity.Export) bizerr.BizError
	GetByClusterAndExportId(ctx context.Context, clusterId, exportId string) (*entity.Export, bizerr.BizError)
	Delete(ctx context.Context, clusterId, exportId string) bizerr.BizError
	Cancel(ctx context.Context, clusterId, exportId string) bizerr.BizError
	Count(ctx context.Context, filter *QueryExportsFilter) (int64, bizerr.BizError)
	List(ctx context.Context, filter *QueryExportsFilter, page *pagination.Page) ([]*entity.Export, bizerr.BizError)
}
