using System;

namespace AsbCloudInfrastructure.Background;

/// <summary>
/// Класс периодической работы.
/// </summary>
public class WorkPeriodic
{
    public Work Work { get; }

    /// <summary>
    /// Период выполнения задачи
    /// </summary>
    public TimeSpan Period { get; set; }

    /// <summary>
    /// Время следующего запуска
    /// </summary>
    public DateTime NextStart
    {
        get
        {
            var lastStart = Work.LastComplete?.Start ?? DateTime.MinValue;
            if (Work.LastError?.Start > lastStart)
                lastStart = Work.LastError.Start;
            return lastStart + Period;
        }
    }

    /// <summary>
    /// Класс периодической работы
    /// </summary>
    /// <param name="id">Идентификатор работы. Должен быть уникальным. Используется в логах и передается в колбэки</param>
    /// <param name="actionAsync">Делегат работы</param>
    /// <param name="period">Период выполнения задачи</param>
    public WorkPeriodic(Work work, TimeSpan period)
    {
        Work = work;
        Period = period;
    }
}