using System.ComponentModel;
namespace SfeduSchedule.Abstractions;
/// 
/// DTO для запроса расписания в Modeus.
/// 
public class ModeusScheduleRequest(
    int size,
    DateTime timeMin,
    DateTime timeMax,
    List? roomId,
    List? attendeePersonId,
    List? courseUnitRealizationId,
    List? cycleRealizationId,
    List? specialtyCode,
    List? learningStartYear,
    List? profileName,
    List? curriculumId,
    List? typeId)
{
    /// 
    /// Количество элементов в ответе.
    /// 
    [DefaultValue(10)]
    public int Size { get; set; } = size;
    /// 
    /// Начальная дата и время.
    /// 
    public DateTime TimeMin { get; set; } = timeMin;
    /// 
    /// Конечная дата и время.
    /// 
    public DateTime TimeMax { get; set; } = timeMax;
    /// 
    /// Список идентификаторов аудиторий. (Guid)
    /// 
    public List? RoomId { get; set; } = roomId;
    /// 
    /// Список идентификаторов участников.
    /// 
    public List? AttendeePersonId { get; set; } = attendeePersonId;
    public List? CourseUnitRealizationId { get; set; } = courseUnitRealizationId;
    public List? CycleRealizationId { get; set; } = cycleRealizationId;
    /// 
    /// Список кодов специальностей.
    /// 
    [DefaultValue(new string[] { "09.03.04" })]
    public List? SpecialtyCode { get; set; } = specialtyCode;
    /// 
    /// Список годов начала обучения.
    /// 
    [DefaultValue(new int[] { 2022, 2023, 2024, 2025 })]
    public List? LearningStartYear { get; set; } = learningStartYear;
    /// 
    /// Список названий профилей подготовки.
    /// 
    [DefaultValue(new string[] { "Методы и средства разработки программного обеспечения" })]
    public List? ProfileName { get; set; } = profileName;
    /// 
    /// Список идентификаторов учебных планов.
    /// 
    public List? CurriculumId { get; set; } = curriculumId;
    /// 
    /// Список типов мероприятий.
    /// 
    [DefaultValue(new string[] { "MID_CHECK", "CONS", "LAB", "LECT", "SEMI", "EVENT_OTHER", "SELF", "CUR_CHECK" })]
    public List? TypeId { get; set; } = typeId;
}
/// 
/// DTO для поиска аудиторий.
/// 
public class RoomSearchRequest
{
    /// 
    /// Название аудитории.
    /// 
    [DefaultValue("")]
    public string Name { get; set; } = "";
    /// 
    /// Сортировка.
    /// 
    [DefaultValue("+building.name,+name")]
    public string Sort { get; set; } = "+building.name,+name";
    /// 
    /// Количество элементов в ответе.
    /// 
    [DefaultValue(10)]
    public int Size { get; set; } = 10;
    /// 
    /// Номер страницы. (пагинация)
    /// 
    [DefaultValue(0)]
    public int Page { get; set; } = 0;
    /// 
    /// Исключать архивные аудитории. false = да, true = нет
    /// 
    [DefaultValue(false)]
    public bool Deleted { get; set; } = false;
}