using System;
using Demo.Domain.UseCase;
using Demo.Data.Repository;
using Demo.Data.LocalData.Entity;
using Demo.Data.Exceptions;
namespace AttendanceApp.UI
{
    public class GroupConsole
    {
        private readonly GroupUseCase _groupUseCase;

        public GroupConsole(GroupUseCase groupUseCase)
        {
            _groupUseCase = groupUseCase;
        }

        public void ShowAllGroups()
        {
            Console.Clear();
            Console.WriteLine("=== Список всех групп ===");
            var groups = _groupUseCase.GetAllGroups();
            foreach (var group in groups)
            {
                Console.WriteLine($"ID: {group.Id} | Название: {group.Name}");
            }
            Console.WriteLine("Нажмите любую клавишу для продолжения...");
            Console.ReadKey();
        }

        public void AddGroup()
        {
            Console.Clear();
            Console.WriteLine("=== Добавление новой группы ===");
            Console.Write("Введите название группы: ");
            var groupName = Console.ReadLine();
            if (!string.IsNullOrWhiteSpace(groupName))
            {
                var newGroup = new Group
                {
                    Id = GenerateNewGroupId(),
                    Name = groupName
                };
                _groupUseCase.AddGroup(newGroup);
                Console.WriteLine("Группа успешно добавлена.");
            }
            else
            {
                Console.WriteLine("Название группы не может быть пустым.");
            }
            Console.WriteLine("Нажмите любую клавишу для продолжения...");
            Console.ReadKey();
        }

        private int GenerateNewGroupId()
        {
            var groups = _groupUseCase.GetAllGroups();
            if (groups != null && groups.Any())
            {
                return groups.Max(g => g.Id) + 1;
            }
            return 1;
        }

        public void UpdateGroup()
        {
            Console.Clear();
            Console.WriteLine("=== Обновление группы ===");
            Console.Write("Введите ID группы: ");
            var input = Console.ReadLine();
            if (int.TryParse(input, out int groupId))
            {
                try
                {
                    var group = _groupUseCase.GetGroupById(groupId);
                    Console.WriteLine($"Текущее название группы: {group.Name}");
                    Console.Write("Введите новое название группы: ");
                    var newName = Console.ReadLine();
                    if (!string.IsNullOrWhiteSpace(newName))
                    {
                        group.Name = newName;
                        _groupUseCase.UpdateGroup(group);
                        Console.WriteLine("Группа успешно обновлена.");
                    }
                    else
                    {
                        Console.WriteLine("Название группы не может быть пустым.");
                    }
                }
                catch (GroupNotFoundException ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            else
            {
                Console.WriteLine("Неверный формат ID группы.");
            }
            Console.WriteLine("Нажмите любую клавишу для продолжения...");
            Console.ReadKey();
        }

        public void DeleteGroup()
        {
            Console.Clear();
            Console.WriteLine("=== Удаление группы ===");
            Console.Write("Введите ID группы: ");
            var input = Console.ReadLine();
            if (int.TryParse(input, out int groupId))
            {
                try
                {
                    _groupUseCase.DeleteGroup(groupId);
                    Console.WriteLine("Группа успешно удалена.");
                }
                catch (GroupNotFoundException ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            else
            {
                Console.WriteLine("Неверный формат ID группы.");
            }
            Console.WriteLine("Нажмите любую клавишу для продолжения...");
            Console.ReadKey();
        }

        public void FindGroupById()
        {
            Console.Clear();
            Console.WriteLine("=== Поиск группы по ID ===");
            Console.Write("Введите ID группы: ");
            var input = Console.ReadLine();
            if (int.TryParse(input, out int groupId))
            {
                try
                {
                    var group = _groupUseCase.GetGroupById(groupId);
                    Console.WriteLine($"ID: {group.Id} | Название: {group.Name}");
                }
                catch (GroupNotFoundException ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            else
            {
                Console.WriteLine("Неверный формат ID группы.");
            }
            Console.WriteLine("Нажмите любую клавишу для продолжения...");
            Console.ReadKey();
        }
    }
}