using Demo.domain.Models; using Demo.Domain.UseCase; using System; using System.Globalization; namespace Demo.UI { public class MainMenuUI { private readonly UserConsoleUI _userConsoleUI; private readonly GroupConsoleUI _groupConsoleUI; private readonly PresenceConsole _presenceConsoleUI; public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, UseCaseGeneratePresence presenceUseCase) { _userConsoleUI = new UserConsoleUI(userUseCase); _groupConsoleUI = new GroupConsoleUI(groupUseCase); _presenceConsoleUI = new PresenceConsole(presenceUseCase); } public void DisplayMenu() { while (true) { Console.WriteLine("\n=-= Главное меню =-=\n"); // Меню команд Console.WriteLine("=-= Команды с Пользователями =-="); Console.WriteLine("1. Вывести всех пользователей"); Console.WriteLine("2. Удалить пользователя по id"); Console.WriteLine("3. Обновить пользователя по id"); Console.WriteLine("4. Найти пользователя по id"); Console.WriteLine(); Console.WriteLine("=-= Команды с Группами =-="); Console.WriteLine("5. Вывести все группы"); Console.WriteLine("6. Добавить группу"); Console.WriteLine("7. Изменить название группы"); Console.WriteLine("8. Поиск группы по ID"); Console.WriteLine(); Console.WriteLine("=-= Команды Presence =-="); Console.WriteLine("9. Сгенерировать посещаемость на день"); Console.WriteLine("10. Сгенерировать посещаемость на неделю"); Console.WriteLine("11. Показать посещаемость"); Console.WriteLine("12. Отметить пользователя как отсутствующего"); Console.WriteLine("13. Вывести всю посещаемость группы"); Console.WriteLine("14. Вывести общую информацию об посещаемости по группе"); Console.WriteLine("15. Вывести отчёт в Excel"); Console.WriteLine(); Console.WriteLine("0. Выход"); Console.Write("\nВаш выбор: "); string comand = Console.ReadLine(); Console.WriteLine(); switch (comand) { case "1": _userConsoleUI.DisplayAllUsers(); break; case "2": Console.Write("Введите ID пользователя для удаления: "); if (int.TryParse(Console.ReadLine(), out int userId)) { _userConsoleUI.RemoveUserById(userId); } else { Console.WriteLine("Неверный формат ID. Введите целое число."); } break; case "3": Console.Write("Введите ID пользователя для обновления: "); if (int.TryParse(Console.ReadLine(), out int updateUserId)) { _userConsoleUI.UpdateUserById(updateUserId); } else { Console.WriteLine("Неверный формат ID. Введите целое число."); } break; case "4": Console.Write("Введите ID пользователя для поиска: "); if (int.TryParse(Console.ReadLine(), out int findUserId)) { _userConsoleUI.FindUserById(findUserId); } else { Console.WriteLine("Неверный формат ID. Введите целое число."); } break; case "5": _groupConsoleUI.DisplayAllGroups(); break; case "6": Console.Write("Введите название новой группы: "); string newGroupName = Console.ReadLine(); _groupConsoleUI.AddGroup(newGroupName); break; case "7": Console.Write("Введите ID группы для изменения: "); if (int.TryParse(Console.ReadLine(), out int groupId)) { Console.Write("Введите новое название группы: "); string newName = Console.ReadLine(); _groupConsoleUI.UpdateGroupName(groupId, newName); } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } break; case "8": Console.Write("Введите ID группы для поиска : "); if (int.TryParse(Console.ReadLine(), out int IdGroup)) { _groupConsoleUI.FindGroupById(IdGroup); } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } break; case "9": Console.Write("Введите номер первого занятия: "); if (int.TryParse(Console.ReadLine(), out int firstLesson)) { Console.Write("Введите номер последнего занятия: "); if (int.TryParse(Console.ReadLine(), out int lastLesson)) { Console.Write("Введите ID группы: "); if (int.TryParse(Console.ReadLine(), out int groupIdForPresence)) { _presenceConsoleUI.GeneratePresenceForDay(DateTime.Now, groupIdForPresence, firstLesson, lastLesson); } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } } else { Console.WriteLine("Неверный формат номера занятия. Введите целое число."); } } else { Console.WriteLine("Неверный формат номера занятия. Введите целое число."); } break; case "10": Console.Write("Введите номер первого занятия: "); if (int.TryParse(Console.ReadLine(), out int firstLessonForWeek)) { Console.Write("Введите номер последнего занятия: "); if (int.TryParse(Console.ReadLine(), out int lastLessonForWeek)) { Console.Write("Введите ID группы: "); if (int.TryParse(Console.ReadLine(), out int groupIdForWeekPresence)) { _presenceConsoleUI.GeneratePresenceForWeek(DateTime.Now, groupIdForWeekPresence, firstLessonForWeek, lastLessonForWeek); } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } } else { Console.WriteLine("Неверный формат номера занятия. Введите целое число."); } } else { Console.WriteLine("Неверный формат номера занятия. Введите целое число."); } break; case "11": Console.Write("Введите дату (гггг-мм-дд): "); if (DateTime.TryParse(Console.ReadLine(), out DateTime date)) { Console.Write("Введите ID группы: "); if (int.TryParse(Console.ReadLine(), out int groupForPresenceView)) { _presenceConsoleUI.DisplayPresence(date, groupForPresenceView); } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } } else { Console.WriteLine("Неверный формат даты. Введите дату в формате гггг-мм-дд."); } break; case "12": Console.Write("Введите ID пользователя: "); if (int.TryParse(Console.ReadLine(), out userId)) { Console.Write("Введите номер первого занятия: "); if (int.TryParse(Console.ReadLine(), out int firstAbsLesson)) { Console.Write("Введите номер последнего занятия: "); if (int.TryParse(Console.ReadLine(), out int lastAbsLesson)) { Console.Write("Введите ID группы: "); if (int.TryParse(Console.ReadLine(), out int absGroupId)) { Console.Write("Введите дату (дд.мм.гггг): "); string dateInput = Console.ReadLine(); if (DateTime.TryParseExact(dateInput, "d.M.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime absenceDate)) { _presenceConsoleUI.MarkUserAbsent(absenceDate, absGroupId, userId, firstAbsLesson, lastAbsLesson); } else { Console.WriteLine("Неверный формат даты. Пожалуйста, используйте формат дд.мм.гггг."); } } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } } else { Console.WriteLine("Неверный формат номера последнего занятия. Введите целое число."); } } else { Console.WriteLine("Неверный формат номера первого занятия. Введите целое число."); } } else { Console.WriteLine("Неверный формат ID пользователя. Введите целое число."); } break; case "13": Console.Write("Введите ID группы: "); if (int.TryParse(Console.ReadLine(), out int groupIdForAllPresence)) { _presenceConsoleUI.DisplayAllPresenceByGroup(groupIdForAllPresence); } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } break; case "14": Console.Write("Введите ID группы: "); if (int.TryParse(Console.ReadLine(), out int groupIdForGeneralPresence)) { _presenceConsoleUI.DisplayGeneralPresence(groupIdForGeneralPresence); } else { Console.WriteLine("Неверный формат ID группы. Введите целое число."); } break; case "15": _presenceConsoleUI.ExportAttendanceToExcel(); Console.WriteLine("Отчёт в Excel успешно создан."); break; case "0": Console.WriteLine("Завершение работы."); return; default: Console.WriteLine("Неизвестная команда. Пожалуйста, введите номер команды из списка."); break; } } } } }