using Demo.Domain.Models;
using Demo.Data.Repository;

namespace Demo.Domain.UseCase
{
    public class GroupUseCase : IGroupUseCase
    {
		private readonly IUserRepository _repositoryUserImpl;
        private readonly IGroupRepository _repositoryGroupImpl;
        public GroupUseCase(IGroupRepository repositoryGroupImpl, IUserRepository repositoryUserImpl)
        {
            _repositoryGroupImpl = repositoryGroupImpl;
            _repositoryUserImpl = repositoryUserImpl;
        }

        public List<Group> GetAllGroups() => _repositoryGroupImpl.GetAllGroup()
        .Select(it => new Group{ID = it.ID, Name = it.Name}).ToList();

        public Group GetGroupById(int groupID)
        {
            GroupLocalEntity? groupLocalEntity = _repositoryGroupImpl.GetGroupById(groupID);
            if (groupLocalEntity == null) throw new Exception("bello");
            return new Group{ID = groupID, Name = groupLocalEntity.Name};
        }

        public bool CreateGroup(string Name){
            _repositoryGroupImpl.CreateGroup(Name);
            return true;
        }

        public Group UpdateGroup(Group group)
        {
            GroupLocalEntity groupLocalEntity = new GroupLocalEntity
            {
                ID = group.ID,
                Name = group.Name
            };
            GroupLocalEntity? result = _repositoryGroupImpl.UpdateGroup(groupLocalEntity);
            if (result == null)
            {
                throw new Exception("Не удалось обновить пользователя: пользователь не найден.");
            }
            return new Group
            {
                ID = result.ID,
                Name = result.Name
            };
        }

        public bool RemoveGroupByID(int userID) {
           return _repositoryGroupImpl.RemoveGroupByID(userID);
        }
    }
}