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

namespace PARR.Core.Repositories.Interfaces.Schedule
{
    public interface IEsppSchTypeConfigRepository : IBaseRepository<EsppSchTypeConfig>
    {
        /// <summary>
        /// Формирует расписание в нормальном понятном виде из БД синхронно
        /// </summary>
        /// <param name="jobGroupId"></param>
        /// <returns></returns>
        EsppScheduleDto? GetEsppScheduleDto(Guid jobGroupId);

        /// <summary>
        /// Формирует расписание в нормальном понятном виде из БД асинхронно
        /// </summary>
        /// <param name="jobGroupId"></param>
        /// <returns></returns>
        Task<EsppScheduleDto?> GetEsppScheduleDtoAsync(Guid jobGroupId);
        
        IQueryable<EsppSchTypeConfig> GetWithSchIncludes();
    }

    //todo: эти методы  GetEsppScheduleDto, GetEsppScheduleDtoAsync должны быть в сервисе а не в репозитории. И модели тогда переедут в Domain или в Core


    /// <summary>
    /// Расписание ЕСПП в нормальном виде
    /// </summary>
    public class EsppScheduleDto
    {
        public required EsppSchTypeSchedule TypeSchedule { get; set; }

        public required List<EsppScheduleValDto> Values { get; set; }
    }

    public class EsppScheduleValDto
    {
        public int Order { get; set; }

        public required EsppSchType Type { get; set; }

        public required EsppSchTypeValue Value { get; set; }
    }


}
