package content

import (
	"context"

	"github.com/kopia/kopia/internal/epoch"
	"github.com/kopia/kopia/repo/format"
)

// Reader defines content read API.
type Reader interface {
	// returns true if the repository supports content compression.
	// this may be slightly stale if the repository recently
	// got upgraded, in which case it will return false which is safe.
	SupportsContentCompression() bool
	ContentFormat() format.Provider
	GetContent(ctx context.Context, id ID) ([]byte, error)
	ContentInfo(ctx context.Context, id ID) (Info, error)
	IterateContents(ctx context.Context, opts IterateOptions, callback IterateCallback) error
	IteratePacks(ctx context.Context, opts IteratePackOptions, callback IteratePacksCallback) error
	ListActiveSessions(ctx context.Context) (map[SessionID]*SessionInfo, error)
	EpochManager(ctx context.Context) (*epoch.Manager, bool, error)
	VerifyContents(ctx context.Context, o VerifyOptions) error
}
