using PARR.Core.Services.UnitFilterService.Models;
using PARR.Domain.Entities.Job;

namespace PARR.TemplateMatcher.Services.Interfaces
{
    /// <summary>
    /// Разрешает конфликты при сопоставлении юнитов к шаблонам и строит итоговую карту связей.
    /// </summary>
    public interface IUnitInTemplateConflictMapper
    {
        /// <summary>
        /// Строит маппинг: UnitId шаблона -> [Список юнитов в UnitsInTemplate].
        /// При наличии нескольких кандидатов для одного юнита выбирается лучший по приоритету:
        /// 1. Наличие в таблице UnitKiiUnit
        /// 2. Наибольшее количество связей
        /// 3. Алфавитный порядок имени юнита
        /// </summary>
        Task<Dictionary<Guid, List<Guid>>> BuildMappingAsync(
            IEnumerable<UnitFilterResultDto> unitFilterResults,
            Job maxJob,
            CancellationToken ct = default);
    }
}
