using data.Repository; using domain.Models; using domain.UseCase; using System; using ui.ui; namespace ui { public class MainMenuUI { private readonly UserConsoleUI _userConsoleUI; private readonly GroupConsoleUI _groupConsoleUI; private readonly PresenceConsole _presenceConsoleUI; public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, UseCaseGeneratePresence presenceUseCase, IPresenceRepository presenceRepository) { _userConsoleUI = new UserConsoleUI(userUseCase); _groupConsoleUI = new GroupConsoleUI(groupUseCase); _presenceConsoleUI = new PresenceConsole(presenceUseCase,presenceRepository); } public void DisplayMenu() { while (true) { Console.WriteLine("\n==================== Главная Панель ====================\n"); Console.WriteLine("~~~~~~~~~~~~~~~ УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ ~~~~~~~~~~~~~~~"); Console.WriteLine("1. Показать список всех пользователей"); Console.WriteLine("2. Удалить пользователя по его Guid"); Console.WriteLine("3. Обновить данные пользователя по Guid"); Console.WriteLine("4. Найти пользователя по его Guid"); Console.WriteLine(); Console.WriteLine("~~~~~~~~~~~~~~~ УПРАВЛЕНИЕ ГРУППАМИ ~~~~~~~~~~~~~~~"); Console.WriteLine("5. Показать список всех групп"); Console.WriteLine("6. Создать новую группу"); Console.WriteLine("7. Удалить группу по ID"); Console.WriteLine("8. Изменить название существующей группы"); Console.WriteLine("9. Найти группу по ее ID"); Console.WriteLine(); Console.WriteLine("~~~~~~~~~~~~~~~ УПРАВЛЕНИЕ ПОСЕЩАЕМОСТЬЮ ~~~~~~~~~~~~~~~"); Console.WriteLine("10. Сгенерировать посещаемость на текущий день"); Console.WriteLine("11. Сгенерировать посещаемость на текущую неделю"); Console.WriteLine("12. Показать посещаемость всех пользователей"); Console.WriteLine("13. Отметить пользователя как отсутствующего"); Console.WriteLine("14. Вывести посещаемость группы по ID"); Console.WriteLine("15. Создать Excel файл"); Console.WriteLine("16. Информация о посещаемости"); Console.WriteLine(); Console.WriteLine("========================================================"); Console.WriteLine("0. Выход из программы"); Console.Write("\nВыберите команду: "); string command = Console.ReadLine(); Console.WriteLine(); switch (command) { case "1": _userConsoleUI.DisplayAllUsers(); break; case "2": Console.Write("Введите Guid пользователя для удаления: "); if (Guid.TryParse(Console.ReadLine(), out Guid userGuid)) { _userConsoleUI.RemoveUserByGuid(userGuid); } else { Console.WriteLine("Неверный формат Guid"); } break; case "3": Console.Write("Введите Guid пользователя для обновления: "); if (Guid.TryParse(Console.ReadLine(), out Guid updateUserGuid)) { _userConsoleUI.UpdateUserByGuid(updateUserGuid); } else { Console.WriteLine("Неверный формат Guid"); } break; case "4": Console.Write("Введите Guid пользователя для поиска: "); if (Guid.TryParse(Console.ReadLine(), out Guid findUserGuid)) { _userConsoleUI.FindUserByGuid(findUserGuid); } else { Console.WriteLine("Неверный формат Guid"); } break; case "5": _groupConsoleUI.DisplayAllGroups(); break; case "6": Console.Write("Введите название новой группы: "); string newGroupName = Console.ReadLine(); _groupConsoleUI.AddGroup(newGroupName); break; case "7": Console.Write("Введите ID группы для удаления: "); string groupIdForDeleteStr = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(groupIdForDeleteStr) && int.TryParse(groupIdForDeleteStr, out int groupIdForDelete)) // Проверяем, что строка не пустая и может быть преобразована в int { _groupConsoleUI.RemoveGroup(groupIdForDeleteStr); } else { Console.WriteLine("Неверный формат ID группы"); } break; case "8": Console.Write("Введите ID группы для изменения: "); if (int.TryParse(Console.ReadLine(), out int groupIdToUpdate)) { Console.Write("Введите новое название группы: "); string newName = Console.ReadLine(); _groupConsoleUI.UpdateGroupName(groupIdToUpdate, newName); } else { Console.WriteLine("Неверный формат ID группы"); } break; case "9": Console.Write("Введите ID группы для поиска: "); if (int.TryParse(Console.ReadLine(), out int idGroupToFind)) { _groupConsoleUI.FindGroupById(idGroupToFind); } else { Console.WriteLine("Неверный формат ID группы"); } break; case "10": Console.Write("Введите номер первого занятия: "); int firstLesson = int.Parse(Console.ReadLine()); Console.Write("Введите номер последнего занятия: "); int lastLesson = int.Parse(Console.ReadLine()); Console.Write("Введите ID группы: "); int groupIdForPresence = int.Parse(Console.ReadLine()); _presenceConsoleUI.GeneratePresenceForDay(DateTime.Now, groupIdForPresence, firstLesson, lastLesson); break; case "11": Console.Write("Введите номер первого занятия: "); int firstLessonForWeek = int.Parse(Console.ReadLine()); Console.Write("Введите номер последнего занятия: "); int lastLessonForWeek = int.Parse(Console.ReadLine()); Console.Write("Введите ID группы: "); int groupIdForWeekPresence = int.Parse(Console.ReadLine()); _presenceConsoleUI.GeneratePresenceForWeek(DateTime.Now, groupIdForWeekPresence, firstLessonForWeek, lastLessonForWeek); break; case "12": Console.Write("Введите дату (гггг-мм-дд): "); DateTime date = DateTime.Parse(Console.ReadLine()); Console.Write("Введите ID группы: "); int groupForPresenceView = int.Parse(Console.ReadLine()); _presenceConsoleUI.DisplayPresence(date, groupForPresenceView); break; case "13": Console.Write("Введите GUID пользователя: "); string userGuidInput = Console.ReadLine(); Guid newUserGuid; // Проверка на корректность GUID if (!Guid.TryParse(userGuidInput, out newUserGuid)) { Console.WriteLine("Ошибка: введён некорректный GUID."); break; } Console.Write("Введите номер первого занятия: "); int firstAbsLesson = int.Parse(Console.ReadLine()); Console.Write("Введите номер последнего занятия: "); int lastAbsLesson = int.Parse(Console.ReadLine()); Console.Write("Введите ID группы: "); int absGroupId = int.Parse(Console.ReadLine()); // Проверка существования группы и пользователя _presenceConsoleUI.MarkUserAsAbsent(DateTime.Now, absGroupId, newUserGuid, firstAbsLesson, lastAbsLesson); break; case "14": Console.Write("Введите ID группы: "); int groupIdForAllPresence = int.Parse(Console.ReadLine()); _presenceConsoleUI.DisplayAllPresenceByGroup(groupIdForAllPresence); break; case "15": _presenceConsoleUI.ExportAttendanceToExcel(); break; case "16": Console.Write("Введите ID группы: "); int searchGroupId = int.Parse(Console.ReadLine()); _presenceConsoleUI.DisplayGeneralPresenceForGroup(searchGroupId); break; case "0": Console.WriteLine("Выход..."); return; default: Console.WriteLine("Неверный выбор, попробуйте снова."); break; } Console.WriteLine(); } } } }