public void MainMenu()
        {
            IEnumerable <UserPost>       posts   = Logic.GetMainFeed();
            EnumerableDisplay <UserPost> display = new EnumerableDisplay <UserPost>(posts, 7, PostDisplay);

            while (true)
            {
                Console.Clear();
                display.items = Logic.GetMainFeed().ToList();

                Title("Home");

                // Display List of Posts
                display.Display();

                // Display and Input Selection
                Console.WriteLine(
                    bar() +
                    $"{(display.HasPreviousPage ? "[Q] Previous Page " : "")}" +
                    $"{(display.HasNextPage ? "[W] Next page" : "")}" + (display.HasNextPage || display.HasPreviousPage ? "\n" : "") +
                    "[1] Create Post " +
                    "[2] Users " +
                    "[3] Communities " +
                    "[4] Profile " +
                    "[X] Logout");
                Console.Write(bar());
                string selection = JHelper.InputString("Enter Selection: ", toUpper: true, validator: e => e.In("Q", "W", "1", "2", "3", "4", "X"));

                // Perform selection
                if (display.HasPreviousPage && selection == "Q")
                {
                    display.PreviousPage();
                }
                else if (display.HasNextPage && selection == "W")
                {
                    display.NextPage();
                }
                else if (selection == "1")
                {
                    CreatePost();
                }
                else if (selection == "2")
                {
                    UsersMenu();
                }
                else if (selection == "3")
                {
                    CommunitiesMenu();
                }
                else if (selection == "4")
                {
                    SeeOwnProfile();
                }
                else if (selection == "X")
                {
                    break;
                }
            }
        }
        public void SeeOwnProfile()
        {
            User user = Logic.GetLoggedinUser();
            IEnumerable <UserPost>       posts   = user.Posts;
            EnumerableDisplay <UserPost> display = new EnumerableDisplay <UserPost>(posts, 5, PostDisplay);

            while (true)
            {
                Console.Clear();

                display.items = user.Posts.ToList();

                // Display Profile Description
                Title($"Profile of {user.Name}");

                // Display Posts
                Console.WriteLine("Posts: ");
                display.Display();
                // Get Input
                bool followed = Logic.IsFollowed(user);
                Console.WriteLine(
                    bar() +
                    $"{(display.HasPreviousPage ? "[Q] Previous Page " : "")}" +
                    $"{(display.HasNextPage ? "[W] Next Page" : "")}" + (display.HasNextPage || display.HasPreviousPage ? "\n" : "") +
                    "[1] See Joined Communities " +
                    "[2] See Followed Users " +
                    "[X] Back");
                Console.Write(bar());
                string selection = JHelper.InputString("Enter Selection: ", toUpper: true, validator: e => e.In("Q", "W", "1", "2", "X"));
                if (display.HasPreviousPage && selection == "Q")
                {
                    display.PreviousPage();
                }
                else if (display.HasNextPage && selection == "W")
                {
                    display.NextPage();
                }
                else if (selection == "1")
                {
                    SeeFollowedCommunities(user);
                }
                else if (selection == "2")
                {
                    SeeFollowedUsers(user);
                }
                else if (selection == "X")
                {
                    break;
                }
            }
        }
        // USERS MODULE
        public void UsersMenu()
        {
            IEnumerable <UserPost>       posts   = Logic.GetUserFeed();
            EnumerableDisplay <UserPost> display = new EnumerableDisplay <UserPost>(posts, 7, PostDisplay);

            while (true)
            {
                Console.Clear();
                display.items = Logic.GetUserFeed().ToList();

                Title("Users Feed");

                display.Display();
                Console.WriteLine(
                    bar() +
                    $"{(display.HasPreviousPage ? "[Q] Previous Page " : "")}" +
                    $"{(display.HasNextPage ? "[W] Next Page" : "")}" + (display.HasNextPage || display.HasPreviousPage ? "\n" : "") +
                    "[1] See Recommended Users " +
                    "[2] Search Users " +
                    "[X] Back");
                Console.Write(bar());
                string selection = JHelper.InputString("Enter Selection: ", toUpper: true, validator: e => e.In("Q", "W", "1", "2", "X"));

                if (display.HasPreviousPage && selection == "Q")
                {
                    display.PreviousPage();
                }
                else if (display.HasNextPage && selection == "W")
                {
                    display.NextPage();
                }
                else if (selection == "1")
                {
                    SeeRecommendedUsers();
                }
                else if (selection == "2")
                {
                    SearchUsers();
                }
                else if (selection == "X")
                {
                    break;
                }
                else
                {
                    Console.WriteLine("Please Enter a Valid Selection.");
                }
            }
        }
        public void SeeCommunityPosts(Community community)
        {
            var display = new EnumerableDisplay <UserPost>(community.Posts, 7, PostDisplay);

            while (true)
            {
                display.items = community.Posts.ToList();
                Console.Clear();

                Title($"{community.Name} Posts");

                display.Display();

                bool following = Logic.IsFollowingCommunity(community);
                Console.WriteLine(
                    bar() +
                    $"{(display.HasPreviousPage ? "[Q] Previous Page " : "")}" +
                    $"{(display.HasNextPage ? "[W] Next page" : "")}" + (display.HasNextPage || display.HasPreviousPage ? "\n" : "") +
                    $"[1] {(following ? "Leave" : "Join")} " +
                    $"[2] Post " +
                    "[X] Back");
                Console.Write(bar());
                string selection = JHelper.InputString("Enter Selection: ", toUpper: true, validator: e => e.In("1", "2", "X"));

                if (selection == "1")
                {
                    if (following)
                    {
                        Logic.UnfollowCommunity(community);
                    }
                    else
                    {
                        Logic.FollowCommunity(community);
                    }
                }
                else if (selection == "2")
                {
                    PostToCommunity(community);
                }
                else if (selection == "X")
                {
                    break;
                }
            }
        }
        public void UserProfile(User user)
        {
            IEnumerable <UserPost>       posts   = user.Posts;
            EnumerableDisplay <UserPost> display = new EnumerableDisplay <UserPost>(posts, 5, PostDisplay);

            while (true)
            {
                Console.Clear();
                IEnumerable <Community> communities   = Logic.CommonCommunities(user).Take(5);
                IEnumerable <User>      followedUsers = Logic.CommonFollowedUsers(user).Take(5);

                display.items = user.Posts.ToList();

                // Display Profile Description
                Title($"Profile of {user.Name}");

                // Display Common Communities
                Console.WriteLine("Communities in Common: " + string.Join(", ", communities.Select(e => e.Name)));

                Console.WriteLine("Followed Users in Common: " + string.Join(", ", followedUsers.Select(e => e.Name)));


                // Display Posts
                Console.WriteLine("\nPosts: ");
                display.Display();
                // Get Input
                bool followed = Logic.IsFollowed(user);
                Console.WriteLine(
                    bar() +
                    $"{(display.HasPreviousPage ? "[Q] Previous Page " : "")}" +
                    $"{(display.HasNextPage ? "[W] Next Page" : "")}" + (display.HasNextPage || display.HasPreviousPage ? "\n" : "") +
                    $"[1] {(followed ? "Unfollow User" : "Follow User ")} " +
                    "[2] See Joined Communities " +
                    "[3] See Followed Users " +
                    "[X] Back");
                Console.Write(bar());
                string selection = JHelper.InputString("Enter Selection: ", toUpper: true, validator: e => e.In("Q", "W", "1", "2", "3", "X"));
                if (display.HasPreviousPage && selection == "Q")
                {
                    display.PreviousPage();
                }
                else if (display.HasNextPage && selection == "W")
                {
                    display.NextPage();
                }
                else if (selection == "1")
                {
                    if (followed)
                    {
                        Logic.UnfollowUser(user);
                    }
                    else
                    {
                        Logic.FollowUser(user);
                    }
                }
                else if (selection == "2")
                {
                    SeeFollowedCommunities(user);
                }
                else if (selection == "3")
                {
                    SeeFollowedUsers(user);
                }
                else if (selection == "X")
                {
                    break;
                }
            }
        }