/// <summary>
        /// Get all tweets
        /// </summary>
        /// <param name="tweetTxtFileName"></param>
        /// <param name="users"></param>
        /// <returns></returns>
        public List <Tweet> GetAllTweets(string tweetTxtFileName, List <User> users)
        {
            _fileToRead = Enums.FileToRead.tweet;
            var lines = StringReader(tweetTxtFileName).ToList();

            // Build list of tweets
            return(lines.Select(line =>
            {
                var content = line.Substring(line.IndexOf(">", StringComparison.Ordinal) + 1, line.Length - line.IndexOf(">", StringComparison.Ordinal) - 1);
                var nameOfUserOfTweet = line.Substring(0, line.IndexOf(">", StringComparison.Ordinal));
                var user = users.SingleOrDefault(x => x.Name.Equals(nameOfUserOfTweet));// Use SingleOrDefault as it is possible the file contains a tweet with a name of someone that isn't in the users file. So potentially null

                return new Tweet
                {
                    Id = lines.IndexOf(line) + 1,
                    Content = content,
                    UserId = user?.Id ?? 0
                };
            }).ToList());
        }
        /// <summary>
        /// Get all users and all the followers for each user
        /// </summary>
        /// <param name="userTxtFileName"></param>
        /// <returns></returns>
        public List <User> GetUsersAndTheirFollowers(string userTxtFileName)
        {
            _fileToRead = Enums.FileToRead.user;
            var lines = StringReader(userTxtFileName).ToList();

            // Build list of users
            var names = lines.SelectMany(x => x.Replace(" follows", ",").Replace(" ", "").Split(',')).Distinct().ToList();

            var users = names.Select(name => new User
            {
                Id   = names.IndexOf(name) + 1,
                Name = name
            }).ToList();

            // Build list of followers
            var namesOfFollowers = lines.Select(x => x.Substring(0, x.IndexOf("follows", StringComparison.Ordinal) - 1)).Distinct().ToList();

            var followers = namesOfFollowers
                            .Select(nameOfFollower =>
            {
                var linesWhereUserFollowed = lines.Where(line => line.Substring(0, line.IndexOf("follows", StringComparison.Ordinal) - 1).Equals(nameOfFollower));
                var usersFollowed          = linesWhereUserFollowed.SelectMany(line => line.Substring(line.IndexOf("follows", StringComparison.Ordinal) + 8, line.Length - line.IndexOf("follows", StringComparison.Ordinal) - 8).Replace(" ", "").Split(',')).Distinct().ToList();
                var user = users.Single(x => x.Name.Equals(nameOfFollower));

                return(new Follower
                {
                    Id = namesOfFollowers.IndexOf(nameOfFollower) + 1,
                    UserId = user.Id,
                    Name = nameOfFollower,
                    UserIdsFollowed = usersFollowed.Select(x => users.Single(y => y.Name.Equals(x)).Id).ToList()
                });
            }).ToList();

            // Map followers into User.Followers
            AddFollowerToUser(users, followers);

            return(users);
        }