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

namespace PARR.Core.Repositories.Interfaces
{
    public interface ITemplateRepository : IBaseRepository<Template>
    {
        Task<Template?> GetTemplateByNameAsync(string name);


        /// <summary>
        /// Резервирует неиспользуемый шаблон: устанавливает статус <see cref="TemplateStatusTypeEnum.Updating"/> 
        /// и фиксирует данные инициатора.
        /// </summary>
        /// <param name="newUnitId">Идентификатор подразделения (используется для фильтрации и логирования).</param>
        /// <param name="initiator">Данные инициатора операции.</param>
        /// <returns>
        /// Идентификатор зарезервированного шаблона или <see langword="null"/>, 
        /// если подходящий шаблон не найден.
        /// </returns>
        Task<Guid?> ReserveUnusedTemplateAsync(Guid newUnitId, HistoryInitiator initiator);

        IQueryable<Template> GetWithIncludes();
    }
}
