using PARR.Domain.Entities.Base.History;
using PARR.Domain.Entities.Job;
using PARR.TemplateMatcher.Models;

namespace PARR.TemplateMatcher.Services.Interfaces;

public interface IGroupedTemplateProcessor
{
    /// <summary>
    /// Обрабатывает построенные группы шаблонов:
    /// 1. Ищет существующие шаблоны.
    /// 2. Сравнивает состав юнитов.
    /// 3. Обновляет, переиспользует или создает новые шаблоны.
    /// 4. Возвращает набор ключей ожидаемых шаблонов для последующей деактивации лишних.
    /// </summary>
    Task<HashSet<(Guid JobId, Guid UnitId, int Index)>> ProcessAsync(
        List<GroupedTemplateGroup> groups,
        List<Job> jobsInGroup,
        Job maxJob,
        HistoryInitiator initiator,
        CancellationToken ct = default);
}