package tracestore

import (
	"context"
	"time"

	"go.skia.org/infra/golden/go/tiling"
	"go.skia.org/infra/golden/go/types"
)

// Entry is one digests and related params to be added to the TraceStore.
type Entry struct {
	// Params describe the configuration that produced the digest/image.
	// These params will be used to form the trace id.
	Params map[string]string

	// Options give extra details about this trace. These options will be stored
	// tile by tile, with the most recent commit's options overwriting any
	// previous options. These details do not affect the trace id and are
	// largely considered to be FYI.
	Options map[string]string

	// Digest references the image that was generated by the test.
	// If two different Puts set a digest for a given commit + Params, the one
	// with the later timestamp will be kept.
	Digest types.Digest
}

// TraceStore is the interface to store trace data.
type TraceStore interface {
	// Put writes the given entries to the TraceStore at the given commit hash. The timestamp is
	// assumed to be the time when the entries were generated and will be used for the digests.
	// It is undefined behavior to have multiple entries with the exact same Params.
	Put(ctx context.Context, commitHash string, entries []*Entry, ts time.Time) error

	// GetTile reads the last n commits and returns them as a tile.
	// The second return value is all commits that are in the tile.
	GetTile(ctx context.Context, nCommits int) (*tiling.Tile, []tiling.Commit, error)

	// GetDenseTile constructs a tile containing only commits that have data for at least one trace.
	// The returned tile will always have length exactly nCommits unless there are fewer than
	// nCommits commits with data. The second return value contains all commits starting with the
	// first commit of the tile and ending with the most recent commit, in order; i.e. it includes
	// all commits in the tile as well as the omitted commits.
	GetDenseTile(ctx context.Context, nCommits int) (*tiling.Tile, []tiling.Commit, error)
}
