public bool TryLogin(out FacadeBase facade, out ILoginToken loginToken, string userName, string password)
        {
            if (userName == "admin")
            {
                if (password == "99999")
                {
                    facade     = new LoggedInAdministratorFacade();
                    loginToken = new LoginToken <Administrator>()
                    {
                        User = mainAdmin
                    };
                    log.Info("Main Administrator has logged in to the system");
                    return(true);
                }
                else
                {
                    log.Error("One or more of the super admin details are wrong");
                    throw new WrongCredentialsException("One or more of the super admin details are wrong");
                }
            }
            User user;

            try
            {
                user = _userDAO.GetUserByUserName(userName);
            }
            catch (Exception ex)
            {
                log.Error($"Could not find user: {ex.Message}");
                throw new WrongCredentialsException($"One or more of the details are wrong: {ex.Message}");
            }
            if (user.Password == password)
            {
                switch (user.User_Role)
                {
                case 1:
                {
                    facade = new LoggedInAdministratorFacade();
                    Administrator admin = _adminDAO.GetAdminByUserId(user.Id);
                    loginToken = new LoginToken <Administrator>()
                    {
                        User = admin
                    };
                    break;
                }

                case 2:
                {
                    facade = new LoggedInAirlineFacade();
                    AirlineCompany airlineCompany = _airlineDAO.GetAirlineByUserId(user.Id);
                    loginToken = new LoginToken <AirlineCompany>()
                    {
                        User = airlineCompany
                    };
                    break;
                }

                case 3:
                {
                    facade = new LoggedInCustomerFacade();
                    Customer customer = _customerDAO.GetCustomerByUserId(user.Id);
                    loginToken = new LoginToken <Customer>()
                    {
                        User = customer
                    };
                    break;
                }

                default:
                {
                    facade     = new AnonymousUserFacade();
                    loginToken = null;
                    break;
                }
                }
                log.Info($"User {userName} has logged in to the system");
                return(true);
            }
            else
            {
                log.Error($"One or more of the user {userName} details are wrong");
                throw new WrongCredentialsException($"One or more of the user {userName} details are wrong");
            }
        }