using PARR.Domain.Common.Rabbit.Messages.TemplateMatching;
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Entities.Job;
using PARR.Domain.Entities.Unit;

namespace PARR.TemplateMatcher.Services.Interfaces
{

    /// <summary>
    /// Отвечает за полный цикл переиспользования Unused-шаблона:
    /// 1. Атомарный захват в БД (с retry).
    /// 2. Нормализация имени.
    /// 3. Отправка команды на обновление (активацию) в MQ.
    /// </summary>
    public interface ITemplateReuser
    {
        /// <summary>
        /// Пытается переиспользовать шаблон. Возвращает true, если успешно захвачен и отправлена команда.
        /// </summary>
        Task<bool> TryReuseAsync(
            Job targetJob,
            Guid targetUnitId,
            Unit? targetUnit,
            int? index,
            List<UnitInTemplateMessage> unitsInTemplate,
            bool isActiveTemplate,
            bool isActiveSchedule,
            HistoryInitiator initiator,
            CancellationToken ct = default);
    }
}
