using PARR.DAL.NextRunServices.Models;

namespace PARR.DAL.NextRunServices.Subservices
{
    //todo: public -> internal!!!
    public interface ITemplateDistributor
    {
        /// <summary>
        /// Распределяет все шаблоны на указанный период, учитывая план нагрузки.
        /// Возвращает список всех шаблонов с обновлёнными датами выполнения.
        /// </summary>
        /// <param name="startDate">Дата начала распределения</param>
        /// <param name="duration">Длительность распределения, дней</param>
        /// <param name="referenceDate">ReferenceDate</param>
        /// <param name="allTemplates">Спиоск шаблонов для распределения</param>
        /// <param name="excludeWeekends">Исключать выходные из распределения</param>
        /// <returns></returns>
        Task<List<TemplateNextRunResultDto>> DistributeTemplatesAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, List<TemplateNextRunDto> allTemplates, bool excludeWeekends);



        /// <summary>
        /// Возвращает актуальную дату выполнения для одного шаблона, учитывая план нагрузки.
        /// Возвращает обновлённый шаблон с новой датой выполнения.
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="duration"></param>
        /// <param name="referenceDate"></param>
        /// <param name="targetTemplate"></param>
        /// <param name="allTemplates"></param>
        /// <param name="excludeWeekends"></param>
        /// <param name="isNew">Новый шаблон</param>
        /// <returns></returns>
        Task<TemplateNextRunResultDto> GetValidNextRunForTemplateAsync(DateOnly startDate, int duration, DateTimeOffset referenceDate, TemplateNextRunDto targetTemplate, List<TemplateNextRunDto> allTemplates, bool excludeWeekends, bool isNew);
    }
}

