using AppException; using Model; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Managers { public class UserDefaultManager : IUserManager { private IDataManager _dataManager; private IPasswordManager _passwordManager; private User? _currentConnectedUser = null; public UserDefaultManager(IDataManager dataManager, IPasswordManager passwordManager) { _dataManager = dataManager; _passwordManager = passwordManager; } public User? CurrentConnectedUser => _currentConnectedUser; public bool AddUserToData(User user) { var userList = _dataManager.Data[nameof(User)]; if (userList.Exists(r => r.Equals(user))) return false; _dataManager.Data[nameof(User)].Add(user); return true; } public ICollection GetAllUsers() { return _dataManager.GetFromData(); } public User GetUserFromMail(string mail) { User? user = _dataManager.GetFromData().ToList() .Find(u => u.Mail == mail); if (user is null) throw new UserNotFoundException(); return user; } public bool LogIn(string mail, string password) { if (CurrentConnectedUser is not null) throw new UserAlreadyConnectedException(); User? user = _dataManager.GetFromData().ToList() .Find(u => u.Mail == mail); if (user is null) throw new UserNotFoundException(); if (!_passwordManager.VerifyPassword(password, user.Password)) return false; _currentConnectedUser = user; return true; } public void LogOut() { if (CurrentConnectedUser is null) throw new NoUserConnectedException(); _currentConnectedUser = null; } public bool ModifyUserInData(User oldUser, User newUser) { try { var index = _dataManager.GetFromData().ToList() .FindIndex(u => u.Equals(oldUser)); _dataManager.Data[nameof(User)][index] = newUser; } catch (ArgumentNullException e) { Debug.WriteLine("User to modify not found."); return false; } return true; } } }