/// <summary>
        /// Simply gets the phrase from a random line from any of the MultiLineTexts
        /// in the given multiLineTextList parameter.
        /// </summary>
        /// <returns></returns>
        private PhraseEdit GetRandomPhrase(MultiLineTextList multiLineTextList)
        {
            var relevantBeliefs =
                PhraseBeliefList.GetBeliefsAboutPhrasesInMultiLineTextsAsync(multiLineTextList);

            var randomMlt  = RandomPicker.Ton.PickOne <MultiLineTextEdit>(multiLineTextList);
            var randomLine = RandomPicker.Ton.PickOne <LineEdit>(randomMlt.Lines);

            return(randomLine.Phrase);
        }
        private async Task <ResultArgs <double> > GetPercentKnownAsync(PhraseEdit phrase)
        {
            #region CHECK CACHE

            var results = from entry in Cache
                          where entry.Key.PhraseText == phrase.Text &&
                          entry.Key.LanguageText == phrase.Language.Text
                          select entry;

            if (results.Count() == 1)
            {
                #region GIVE ANSWER FROM CACHE

                var entry = results.First();

                var percentKnown = entry.Value;
                return(await new Task <ResultArgs <double> >(() => { return new ResultArgs <double>(percentKnown); }));

                #endregion
            }

            #endregion

            #region CHECK BELIEFS IN DB

            var beliefs = await PhraseBeliefList.GetBeliefsAboutPhraseAsync(phrase.Id);

            if (beliefs.Count <= 0)
            {
                //WE HAVE NO PRIOR BELIEFS ABOUT THIS PHRASE
                var percentKnownTask = GetPercentKnownAboutPhraseWithNoPriorBeliefsAsync(phrase);
                return(await percentKnownTask);
            }
            else
            {
                //WE HAVE BELIEFS ABOUT THIS PHRASE
                var percentKnownTask = GetPercentKnownAboutPhraseWithBeliefs(phrase, beliefs);
                return(await percentKnownTask);
            }

            #endregion
        }
        private async Task <ResultArgs <double> > GetPercentKnownAboutPhraseWithBeliefs(PhraseEdit phrase,
                                                                                        PhraseBeliefList beliefs)
        {
//#if DEBUG
//        if (phrase.Text.Contains("amour") && phrase.Text.Contains("mon"))
//          System.Diagnostics.Debugger.Break();
//#endif
            if (beliefs.Count < 1)
            {
                throw new ArgumentException("beliefs.Count < 1. This method assumes that there is at least one belief about the phrase \n\n" +
                                            "Phrase.Text: " + phrase.Text);
            }

            ///FOR NOW, THIS JUST GETS THE MOST RECENT BELIEF AND GOES WITH THE STRENGTH OF THAT BELIEF.
            ///THIS IS ABSOLUTELY NOT HOW IT SHOULD BE BUT THAT IS WHY WE HAVE A "DEFAULT" ADVISOR AND
            ///EXTENSIBILITY FOR THIS.

            var results = from belief in beliefs
                          orderby belief.TimeStamp
                          select belief;

            var mostRecentBelief = results.Last();
            var percentKnown     = mostRecentBelief.Strength;

            return(await new Task <ResultArgs <double> >(() => { return new ResultArgs <double>(percentKnown); }));
        }