using System;
using System.Threading;
using System.Threading.Tasks;

namespace AsbCloudInfrastructure.Background
{
#nullable enable
    /// <summary>
    /// Класс периодической работы.
    /// </summary>
    public class WorkPeriodic : WorkBase
    {
        /// <summary>
        /// Период выполнения задачи
        /// </summary>
        public TimeSpan Period { get; set; }

        /// <summary>
        /// Время следующего запуска
        /// </summary>
        public DateTime NextStart => LastStart + Period;

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