using Demo.Domain.Models;
using Demo.Domain.UseCase;

namespace Demo.UI
{
    public class MainMenuUI
    {
       
        UserConsoleUI _userConsoleUI;
        GroupConsoleUI _groupConsoleUI;
        PresenceConsoleUI _presenceConsoleUI;
        AdminConsoleUI _adminConsoleUI;

        public MainMenuUI(IUserUseCase userUseCase, IGroupUseCase groupUseCase, IPresenceUseCase presenceUseCase, IAdminUseCase adminUseCase) { 
        _userConsoleUI = new UserConsoleUI(userUseCase);
        _groupConsoleUI = new GroupConsoleUI(groupUseCase, userUseCase, presenceUseCase);
        _presenceConsoleUI = new PresenceConsoleUI(presenceUseCase);
        _adminConsoleUI = new AdminConsoleUI(adminUseCase);
            SelectRole();
            
        }

        private void SelectRole()
        {
            Console.WriteLine("Выберите роль:\n1: user\n2: admin");
            string role = Console.ReadLine();

            if (role == "1")
            {
                DisplayMenu();
            }
            else if (role == "2")
            {
                DisplayAdminMenu();
            }
            else
            {
                Console.WriteLine("Неверная роль. Попробуйте еще раз.");
                SelectRole();
            }
        }

        private void DisplayAdminMenu()
        {
            while(true)
            {
                switch (Console.ReadLine())
                {
                    case "0": _adminConsoleUI.ExcelExport(Convert.ToInt32(Console.ReadLine())); break;

                    default: DisplayAdminMenu();
                        break;
                }
            }
        }

        private void DisplayMenu() {
            while (true)
            {
                switch (Console.ReadLine())
                {
                    case "0": _groupConsoleUI.DisplayAllBoutGroup(Convert.ToInt32(Console.ReadLine())); break;
                    case "1": _groupConsoleUI.DisplayAllGroups(); break;
                    case "2": _groupConsoleUI.CreateNewGroup(Console.ReadLine()); break;
                    case "3": _groupConsoleUI.UpdateGroupName(Group.Parse(Console.ReadLine())); break;
                    case "4": _groupConsoleUI.DisplayGroupByID(Convert.ToInt32(Console.ReadLine())); break;
                    case "5": _groupConsoleUI.RemoveGroupByID(Convert.ToInt32(Console.ReadLine())); break;

                    case "6": _userConsoleUI.DisplayAllUsers(); break;
                    case "7": _userConsoleUI.DisplayUserByGuid(Guid.Parse(Console.ReadLine())); break;
                    case "8": _userConsoleUI.UpdateUserByGuid(User.Parse(Console.ReadLine())); break;
                    case "9": _userConsoleUI.RemoveUserByGuid(Guid.Parse(Console.ReadLine())); break;
                    
                    case "10": Console.WriteLine("писяпопакака"); break;

                    case "11": _presenceConsoleUI.DisplayPresenceByGroup(Convert.ToInt32(Console.ReadLine())); break;
                    case "12": _presenceConsoleUI.DisplayPresenceByGroupByTime(Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine()))); break;
                    case "13": _presenceConsoleUI.GeneratePresence(Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine()))); break;
                    case "14": _presenceConsoleUI.GeneratePresenceWeek(Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine()))); break;
                    case "15": _presenceConsoleUI.IsAttedance(Convert.ToInt32(Console.ReadLine()), Convert.ToInt32(Console.ReadLine()), DateOnly.FromDateTime(Convert.ToDateTime(Console.ReadLine())), Guid.Parse(Console.ReadLine())); break;

                    default: DisplayMenu();
                        break;
                }
            }
        }
        
    }
}