package service

import (
	"context"
	"io"
)

// actorsBackupFileName is the name of the entry in the export ZIP that contains the actor host's data
// The payload is Francis' own backup stream, which is a binary, versioned, provider-neutral format
const actorsBackupFileName = "francis.bin"

// ActorsBackupProvider backs up and restores the actor host's data: actor state, alarms, and dead-lettered jobs.
type ActorsBackupProvider interface {
	// Backup writes a snapshot of all the actor host's persistent data to w.
	// It runs against a consistent snapshot without blocking writers, so it's safe to take while Pocket ID is running.
	Backup(ctx context.Context, w io.Writer) error

	// Restore wipes all the actor host's persistent data and loads a snapshot produced by Backup from r.
	// It fails if any host is currently connected, since restoring underneath a running Pocket ID instance would corrupt active actors.
	Restore(ctx context.Context, r io.Reader) error
}
