using PARR.Domain.Entities;
using PARR.Domain.Entities.Base.History;

namespace PARR.TemplateMatcher.Services.Interfaces
{
    public interface ITemplateReuser
    {
        /// <summary>
        /// Пытается переиспользовать неиспользуемый шаблон для указанной работы и ЭК.
        /// При резервировании шаблона для правильного расчета NextRun Id работы 
        /// и ЭК устанавливается при захвате.
        /// </summary>
        /// <param name="jobId">Id работы.</param>
        /// <param name="unitId">Id ЭК.</param>
        /// <param name="initiator">Данные инициатора операции.</param>
        /// <param name="maxAttempts">Максимальное количество попыток (по умолчанию 3).</param>
        /// <returns>
        /// Зарезервированный шаблон или <see langword="null"/>, 
        /// если не удалось получить шаблон после всех попыток. 
        /// </returns>
        Task<Template?> TryReuseOneUnusedTemplateAsync(
            Guid jobId,
            Guid unitId,
            HistoryInitiator initiator,
            int maxAttempts = 3);
    }
}
