public bool TryLogin(string userName, string password, out ILoginToken token, out FacadeBase facade)
        {
            _logger.Info($"{userName} trying to login");

            if (userName == "admin" && password == "9999")
            {
                token  = new LoginToken <Administrator>(new Administrator("Admin", "Admin", AdminLevel.Main_Admin, new User(userName, password, "*****@*****.**", UserRoles.Administrator)));
                facade = new LoggedInAdministratorFacade();
                _logger.Info($"{userName} succeeded to login as main administrator");
                return(true);
            }

            try
            {
                User user = _userDAO.GetUserByUserNameAndPassword(userName, password);

                if (user == null)
                {
                    throw new WrongCredentialsException();
                }

                switch (user.UserRole)
                {
                case UserRoles.Administrator:
                    Administrator administrator = _adminDAO.GetAdministratorByUserId(user.Id);
                    token  = new LoginToken <Administrator>(administrator);
                    facade = new LoggedInAdministratorFacade();
                    break;

                case UserRoles.Airline_Company:
                    AirlineCompany airlineCompany = _airlineDAO.GetAirlineCompanyByUserId(user.Id);
                    token  = new LoginToken <AirlineCompany>(airlineCompany);
                    facade = new LoggedInAirlineFacade();
                    break;

                case UserRoles.Customer:
                    Customer customer = _customerDAO.GetCustomerByUserId(user.Id);
                    token  = new LoginToken <Customer>(customer);
                    facade = new LoggedInCustomerFacade();
                    break;

                default:    //Will not happen
                    token  = null;
                    facade = new AnonymousUserFacade();
                    break;
                }

                _logger.Info($"{userName} succeeded to login as {user.UserRole}");

                return(true);
            }
            catch (WrongCredentialsException)
            {
                token  = null;
                facade = new AnonymousUserFacade();
                _logger.Info($"{userName} failed to login");
                return(false);
            }
        }