private async Task <UserInfo> UserToUserInfo(User user)
        {
            var userInfo = new UserInfo
            {
                Email    = user.Email,
                Name     = user.FirstName + " " + user.LastName,
                Selected = false
            };

            var friendResult = await FriendshipsApi.GetFriendship(_settings.Jwt, user.Email);

            if (friendResult.IsSuccessful && friendResult.Content != null)
            {
                userInfo.FriendStatus = friendResult.Content.IsConfirmed ? FriendStatus.IsConfirmed : FriendStatus.IsNotConfirmed;
            }
            else
            {
                userInfo.FriendStatus = FriendStatus.NotFriend;
            }

            userInfo.ProfilePhoto = (await ImagesApi.GetProfileImage(userInfo.Email, true)).Content;
            userInfo.IsSelectable = _context.MultiSelection && userInfo.FriendStatus == FriendStatus.IsConfirmed;

            return(userInfo);
        }
        private async Task SetFriendshipStatus()
        {
            var friendResult = await FriendshipsApi.GetFriendship(_settings.Jwt, _email);

            if (friendResult.IsSuccessful)        // Server OK
            {
                if (friendResult.Content == null) // Friendship DNE
                {
                    _userContext.FriendLabel  = "";
                    _userContext.ButtonStatus = UserPageFriendButtonStatus.AddAsFriend;
                    ButtonAddAsFriend.Text    = "Add as Friend";
                }
                else // Friendship Exists
                {
                    _userContext.FriendshipId = friendResult.Content.Id;
                    if (!friendResult.Content.IsConfirmed)
                    {
                        if (_email == friendResult.Content.RequesterEmail) // If User is looking at requester's page
                        {
                            _userContext.FriendLabel  = $"{_userContext.User.FirstName} wants to be Friends";
                            _userContext.ButtonStatus = UserPageFriendButtonStatus.RespondToFriendshipRequest;
                            ButtonAddAsFriend.Text    = "Respond";
                        }
                        else // If User is looking at page AS requester
                        {
                            _userContext.FriendLabel  = "Awaiting Friend Request";
                            _userContext.ButtonStatus = UserPageFriendButtonStatus.CancelFriendshipRequest;
                            ButtonAddAsFriend.Text    = "Cancel Friend Request";
                        }
                    }
                    else
                    {
                        _userContext.FriendLabel  = $"{_userContext.User.FirstName} is your friend";
                        _userContext.ButtonStatus = UserPageFriendButtonStatus.RemoveFriend;
                        ButtonAddAsFriend.Text    = "Remove Friend"; ButtonAddAsFriend.TextColor = Color.DarkRed;
                    }
                }
            }
            else // Server ERROR
            {
                LayoutAddAsFriend.IsVisible = false;
            }
        }
        /// <summary>
        /// Loads the User's friends into the list.
        /// The default functionality of the page - other Users are
        /// only displayed when the search bar is used
        /// </summary>
        private async Task LoadFriends()
        {
            LayoutLoading.IsVisible = true;
            LayoutSearch.IsEnabled  = false;
            ViewUsers.IsEnabled     = false;
            // Get the User currently running the app
            var appUser = (await AccountsApi.GetUserByJwt(_settings.Jwt)).Content;
            // Retrieve the current User's friendships from the Friendships microservice
            var friendshipsResult = await FriendshipsApi.GetUserFriends(_settings.Jwt);

            if (friendshipsResult.IsSuccessful)
            {
                var friends = new List <UserInfo>();
                // Cycle through each friend
                foreach (var friendship in friendshipsResult.Content)
                {
                    // Retrieve the friend's Email. It is the email associated with the friendship that isn't the User's
                    var friendEmail = friendship.ConfirmerEmail == appUser.Email ? friendship.RequesterEmail : friendship.ConfirmerEmail;

                    // Retrieve the friends User data from the Accounts microservice
                    var friendUser = (await AccountsApi.GetUserByEmail(_settings.Jwt, friendEmail)).Content;

                    var userInfo = await UserToUserInfo(friendUser);

                    if (_context.SelectedFriendEmails.Contains(userInfo.Email))
                    {
                        userInfo.Selected = true;
                    }

                    // Finally, convert the friendUser to a UserInfo, and add to the context list
                    friends.Add(userInfo);
                }
                _context.ClearAndSetUsersInfo(friends);
            }

            LayoutLoading.IsVisible = false;
            LayoutSearch.IsEnabled  = true;
            ViewUsers.IsEnabled     = true;
        }
        async void OnAddAsFriendPressed(object sender, EventArgs args)
        {
            if (_userContext.ButtonStatus == UserPageFriendButtonStatus.AddAsFriend)
            {
                await FriendshipsApi.CreateFriendship(_settings.Jwt, _email);
            }
            else if (_userContext.ButtonStatus == UserPageFriendButtonStatus.CancelFriendshipRequest)
            {
                await FriendshipsApi.RemoveFriendship(_settings.Jwt, _userContext.FriendshipId.Value);
            }
            else if (_userContext.ButtonStatus == UserPageFriendButtonStatus.RemoveFriend)
            {
                var choice = await DisplayActionSheet("Remove Friend?", "Cancel", "Confirm");

                if (choice == "Confirm")
                {
                    await FriendshipsApi.RemoveFriendship(_settings.Jwt, _userContext.FriendshipId.Value);
                }
            }
            else if (_userContext.ButtonStatus == UserPageFriendButtonStatus.RespondToFriendshipRequest)
            {
                var choice = await DisplayActionSheet("Respond to Friend Request", null, null, "Confirm", "Ignore");

                if (choice == "Confirm")
                {
                    await FriendshipsApi.ConfirmFriendship(_settings.Jwt, _userContext.FriendshipId.Value);
                }
                else
                {
                    await FriendshipsApi.RemoveFriendship(_settings.Jwt, _userContext.FriendshipId.Value);
                }
            }

            Navigation.InsertPageBefore(new UserPage(_settings, _email), this);
            await Navigation.PopAsync();
        }