/// <summary>
        /// Helper method to read the conversation from <paramref name="inputFilePath"/>.
        /// </summary>
        /// <param name="inputFilePath">
        /// The input file path.
        /// </param>
        /// <param name="userName">
        /// The string representing the username to filter messages with.
        /// </param>
        /// <param name="keyword">
        /// The string used in to match message content by keyword.
        /// </param>
        /// <param name="blacklist">
        /// The strings to be blacklisted from message content.
        /// </param>
        /// <param name="encryptUsernames">
        /// Boolean flag indicating whether to encrypt usernames or not.
        /// </param>
        /// <param name="hideNumbers">
        /// Boolean flag indicating whether to hide numbers or not.
        /// </param>
        /// <returns>
        /// A <see cref="Conversation"/> model representing the conversation.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// Thrown when the input file could not be found.
        /// </exception>
        /// <exception cref="Exception">
        /// Thrown when something else went wrong.
        /// </exception>
        public Conversation ReadConversation(string inputFilePath, string userName, string keyword, string blacklist)
        {
            try
            {
                FileStream stream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read);
                // using statement to properly dispose reader at end of scope.
                using (StreamReader reader = new StreamReader(stream, Encoding.ASCII))
                {
                    string conversationName = reader.ReadLine();
                    var    messages         = new List <Message>();

                    string line;

                    while ((line = reader.ReadLine()) != null)
                    {
                        Message msg = MessageGenerator.CreateNewMessage(line, blacklist);

                        if (MessageFilter.Filter(msg, userName, keyword))
                        {
                            // add the newly instantiated message in List.
                            messages.Add(msg);
                        }
                    }

                    return(new Conversation(conversationName, messages));
                }
            }
            catch (FileNotFoundException)
            {
                throw new FileNotFoundException("The file was not found.");
            }
            catch (IOException)
            {
                throw new IOException("Something went wrong in the IO.");
            }
        }