using PARR.DAL.Models.Job;

namespace PARR.DAL.DomainServices.Interfaces
{
    public interface IUnitFilterService
    {
        /// <summary>
        /// Получает список ID Unit'ов, соответствующих фильтрам Job.
        /// </summary>
        /// <param name="jobId">ID Job</param>
        /// <param name="takeCount">Максимальное количество Unit'ов (опционально)</param>
        /// <returns>Список ID Unit'ов или null, если Job не найден</returns>
        Task<IEnumerable<Guid>?> GetUnitsIdByJobFilterAsync(
            Guid jobId,
            int? takeCount = null);

        /// <summary>
        /// Получает список ID Unit'ов, соответствующих фильтрам Job.
        /// </summary>
        /// <param name="job">Job с предзагруженными UnitFilters, Group, GroupType</param>
        /// <param name="takeCount">Максимальное количество Unit'ов (опционально)</param>
        /// <returns>Список ID Unit'ов</returns>
        Task<IEnumerable<Guid>?> GetUnitsIdByJobFilterAsync(
            Models.Job.Job job,
            int? takeCount = null);

        /// <summary>
        /// Получает имена связанных Unit'ов для заданного Unit, отфильтрованных по RelationshipFilters Job.
        /// Используется для шорткода %СВЯЗИ%.
        /// </summary>
        /// <param name="jobId">ID Job</param>
        /// <param name="unitId">ID Unit, для которого ищутся связи</param>
        /// <param name="ct">Токен отмены (опционально)</param>
        /// <returns>Список имён связанных Unit'ов (уникальные, без дублей)</returns>
        Task<List<string>> GetRelatedUnitNamesAsync(
            Guid jobId,
            Guid unitId);
    }
}
