private Lesson ParseLesson(HtmlNode node, int order, Teacher teacher)
        {
            var emoji = node.Elements("b")
                        .Select(it => AuditoriumExt.ReplaceEmojiByText(it.InnerText))
                        .FirstOrDefault() ?? string.Empty;

            var auditoriums = node.Descendants()
                              .Where(it => it.HasClass("lesson__auditory"))
                              .Select(it => new Auditorium(emoji + " " + it.InnerText, string.Empty));

            var(dateFrom, dateTo) = ParseDates(node);

            var lessonTitle = node.Descendants()
                              .Where(it => it.HasClass("lesson__subject"))
                              .FirstOrDefault()?.InnerText ?? "";
            var match      = regex0.Matches(lessonTitle).LastOrDefault();
            var lessonType = match?.Groups?.Values.ElementAtOrDefault(1)?.Value ?? "Другое";

            if (match != null)
            {
                lessonTitle = lessonTitle.Replace($"({lessonType})", "");
            }
            lessonTitle = ProcessTitle(lessonTitle);
            lessonType  = LessonExt.FixTeacherType(lessonType, lessonTitle);


            var groups = node.Descendants()
                         .Where(it => it.HasClass("lesson__group"))
                         .Select(it => new Group(it.InnerText, false));

            return(new Lesson(
                       order,
                       lessonTitle,
                       lessonType,
                       new List <Teacher>()
            {
                teacher
            },
                       auditoriums.ToList(),
                       groups.ToList(),
                       dateFrom,
                       dateTo
                       ));
        }
        private Lesson ParseLesson(
            JsonElement json,
            int order,
            Group group,
            bool isByDate,
            DateTime date
            )
        {
            this.logger.LogDebug($"ParseLesson order = {order}");
            string title = json.TryGetProperty(LessonTitleKey, out var titleElement)
                ? titleElement.GetString()
                : "Не найден ключ названия занятия. " +
                           $"Возможно, структура расписания была обновлена: {json}";

            var teachers = json.TryGetProperty(LessonTeacherKey, out var teachersElement)
                ? ParseTeachers(teachersElement.GetString())
                : Array.Empty <Teacher>();

            DateTime dateFrom;
            DateTime dateTo;

            if (isByDate)
            {
                dateFrom = date;
                dateTo   = date;
            }
            else
            {
                dateFrom = json.TryGetProperty(LessonDateFromKey, out var dateFromElement)
                    ? ParseDateFrom(dateFromElement.GetString())
                    : DateTime.MinValue;

                dateTo = json.TryGetProperty(LessonDateToKey, out var dateToElement)
                    ? ParseDateTo(dateToElement.GetString())
                    : DateTime.MaxValue;
            }

            if (dateTo < dateFrom)
            {
                var buf = dateTo;
                dateTo   = dateFrom;
                dateFrom = buf;
            }

            var auditoriums = json.TryGetProperty(LessonAuditoriumsKey, out var auditoriumsElement)
                ? ParseAuditoriums(auditoriumsElement)
                : Array.Empty <Auditorium>();

            string type;

            if (json.TryGetProperty(LessonTypeKey, out var typeElement))
            {
                type = typeElement.GetString();
            }
            else
            {
                type = string.Empty;
                Console.WriteLine($"Lesson type key {LessonTypeKey} not found");
            }

            return(new Lesson(
                       order,
                       title,
                       LessonExt.FixType(type, title),
                       teachers,
                       auditoriums,
                       new[] { group },
                       dateFrom,
                       dateTo
                       ));
        }