void UpdateDateOfNextQuestionAttempt(LogEntry line, PathSwitchKind switchKind)
        {
            if (line == null)
            {
                throw new ArgumentNullException("line");
            }

            int cdInHrs        = 0;
            int nextMeditLevel = 0;

            if (switchKind == PathSwitchKind.PathBegin)
            {
                nextMeditLevel = 1;
            }
            else if (switchKind == PathSwitchKind.PathReset)
            {
                nextMeditLevel = 0;
                // there is a 24h cooldown before new path can be learned
                NextQuestionAttemptOverridenUntil = line.Timestamp + TimeSpan.FromHours(24);
            }
            else
            {
                // PathAdvance
                nextMeditLevel = MeditationPaths.FindLevel(line.Content) + 1;
            }

            cdInHrs = MeditationPaths.GetCooldownHoursForLevel(nextMeditLevel, MeditationSkill)
                      .ConstrainToRange(0, int.MaxValue);

            DateOfNextQuestionAttempt = line.Timestamp + TimeSpan.FromHours(cdInHrs);
        }
        bool ProcessQuestionLogSearch(List <LogEntry> lines)
        {
            bool result = false;

            PathSwitchKind switchKind = PathSwitchKind.PathAdvance;

            LogEntry lastPathModifyLine = null;
            LogEntry lastPathFailLine   = null;

            foreach (LogEntry line in lines)
            {
                if (line.Content.Contains("You decide to start pursuing the insights of the path of"))
                {
                    lastPathModifyLine = line;
                    lastPathFailLine   = null;
                    switchKind         = PathSwitchKind.PathBegin;
                }

                //[00:35:09] Congratulations! You have now reached the level of Rock of the path of love!
                if (line.Content.Contains("Congratulations! You have now reached the level"))
                {
                    lastPathModifyLine = line;
                    lastPathFailLine   = null;
                    switchKind         = PathSwitchKind.PathAdvance;
                }

                // [05:49:11] You decide to stop pursuing the insights of the path of knowledge.
                if (line.Content.StartsWith("You decide to stop pursuing the insights of the path of "))
                {
                    lastPathModifyLine = line;
                    lastPathFailLine   = null;
                    switchKind         = PathSwitchKind.PathReset;
                }
                //if (line.Contains("[fail message]")
                //    lastPathFailLine = line;
            }
            if (lastPathModifyLine != null)
            {
                UpdateDateOfNextQuestionAttempt(lastPathModifyLine, switchKind);
                result = true;
            }
            if (lastPathFailLine != null)
            {
                //NYI
            }
            return(result);
        }