// Package state contains everything related to the synchronization state for MVDS.
package state

// RecordType is the type for a specific record, either `OFFER`, `REQUEST` or `MESSAGE`.
type RecordType int

const (
	OFFER RecordType = iota
	REQUEST
	MESSAGE
)

// State is a struct used to store a records [state](https://github.com/status-im/bigbrother-specs/blob/master/data_sync/mvds.md#state).
type State struct {
	Type      RecordType
	SendCount uint64
	SendEpoch int64
	// GroupID is optional, thus nullable
	GroupID   *GroupID
	PeerID    PeerID
	MessageID MessageID
}

type SyncState interface {
	Add(newState State) error
	Remove(id MessageID, peer PeerID) error
	All() ([]State, error)
	Map(epoch int64, process func(State) State) error
}
