using presence.data.Repository;
using presence.domain.UseCase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace presence.ui
{
    public class MainMenuUI
    {
       
        UserConsoleUI _userConsoleUI;
        GroupConsoleUI _groupConsoleUI;
        PresenceConsoleUI _presenceConsoleUI;

        public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, PresenceUseCase presenceUseCase, IPresenceRepository presenceRepository) 
        { 
            _userConsoleUI = new UserConsoleUI(userUseCase);
            _groupConsoleUI = new GroupConsoleUI(groupUseCase);
            _presenceConsoleUI = new PresenceConsoleUI(presenceUseCase, presenceRepository);


            DisplayMenu();
            
        }

        public void DisplayMenu() 
        {
            while (true)
            {
                Console.WriteLine("Выберите действие:");
                Console.WriteLine("1 - Показать всех пользователей");
                Console.WriteLine("2 - Удалить пользователя по ID");
                Console.WriteLine("3 - Показать все группы");
                Console.WriteLine("4 - Найти пользователя по ID");
                Console.WriteLine("5 - Обновить данные пользователя по ID");
                Console.WriteLine("6 - Обновить название группы");
                Console.WriteLine("7 - Добавить новую группу");
                Console.WriteLine("8 - Показать посещаемость группы");
                Console.WriteLine("9 - Показать посещаемость группы за определенную дату");
                Console.WriteLine("10 - Отменить отметку о присутствии");
                Console.WriteLine("11 - Добавить отметку о присутствии");
                Console.WriteLine("12 - Экспортировать посещаемость в Excel");
                Console.WriteLine("13 - Сгенерировать недельную посещаемость");
                
                switch (Console.ReadLine())
                {
                    case "1": _userConsoleUI.DisplayAllUsers(); break;
                    case "2": _userConsoleUI.RemoveUserById(int.Parse(Console.ReadLine())); break;
                    case "3": _groupConsoleUI.DisplayAllGroups(); break;
                    case "4": _userConsoleUI.GetUserById(int.Parse(Console.ReadLine())); break;
                    case "5": _userConsoleUI.UpdateUserById(int.Parse(Console.ReadLine()), Console.ReadLine(), int.Parse(Console.ReadLine())); break;
                    case "6": _groupConsoleUI.UpdateGroupName(Console.ReadLine(), Console.ReadLine()); break;
                    case "7": _groupConsoleUI.AddGroup(Console.ReadLine(), Console.ReadLine()); break;
                    case "8": _presenceConsoleUI.GetPresenceByGroup(int.Parse(Console.ReadLine())); break;
                    case "9": _presenceConsoleUI.GetPresenceByGroupAndDate(int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break;
                    case "10": _presenceConsoleUI.UncheckAttendence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine()), int.Parse(Console.ReadLine())); break;
                    case "11": _presenceConsoleUI.AddPresence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break;
                    case "12": _presenceConsoleUI.ExportPresenceToExcel(int.Parse(Console.ReadLine()), Console.ReadLine()); break;
                    case "13": _presenceConsoleUI.GenerateWeeklyPresence(int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), int.Parse(Console.ReadLine()), DateOnly.Parse(Console.ReadLine())); break;
                    default: DisplayMenu();
                        break;
                }

            }
        }
        
    }
}
