namespace PARR.Core.Services.Snapshots.Interfaces
{
    /// <summary>
    /// Общий снапшот провайдер.
    /// Используется для реализации паттерна "Стратегия"
    /// </summary>
    public interface ISnapshotProvider
    {
        /// <summary>
        /// Периодичность создания снапшота (не меньше 1 минуты).
        /// </summary>
        TimeSpan Interval { get; }

        /// <summary>
        /// Срок хранения снапшотов (например, 30 дней). Всё, что старше — удаляется.
        /// </summary>
        TimeSpan RetentionPeriod { get; }

        /// <summary>
        /// Метод сбора метрик и записи их в базу данных.
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task TakeSnapshotAsync(CancellationToken cancellationToken);

        /// <summary>
        /// Метод очистки устаревших снапшотов.
        /// </summary>
        Task CleanUpOldSnapshotsAsync(CancellationToken cancellationToken);
    }
}
