/// <summary>
 /// Process and add Bonus points to the Last Frame, if applicable.
 /// </summary>
 /// <param name="lastFrame"></param>
 /// <param name="startingPinsNumber"></param>
 /// <param name="bonusString"></param>
 private void AddBonusToTheLastFrame(Frame lastFrame, int startingPinsNumber, string bonusString = null)
 {
     if (string.IsNullOrWhiteSpace(bonusString) && lastFrame.IsBonusAllowed)
     {
         throw new ArgumentException("You're missing the bonus points. Pls check.");
     }
     else if (!string.IsNullOrWhiteSpace(bonusString) && !lastFrame.IsBonusAllowed)
     {
         throw new InvalidOperationException("You're trying to add a Bonus, while it's not allowed based on your last throw. Pls. check.");
     }
     else if (!string.IsNullOrWhiteSpace(bonusString) && lastFrame.IsBonusAllowed)
     {
         FrameRepository _framerepo = new FrameRepository();
         _framerepo.ProcessBonusStringToLastFrame(bonusString, lastFrame, startingPinsNumber);
     }
 }
        /// <summary>
        /// Processes the data for the whole game. Adds new frame to the list as needed.
        /// Call corresponding methods to: parse frame-string, set frame flags and add bonus value.
        /// </summary>
        /// <param name="framesStringsList"></param>
        /// <param name="framesList"></param>
        /// <param name="maxFramesNumber"></param>
        /// <param name="startingPinsNumber"></param>
        /// <param name="bonusString"></param>
        public void BuildAllFramesForTheGame(List <string> framesStringsList, List <Frame> framesList, int maxFramesNumber, int startingPinsNumber, string bonusString = null)
        {
            ValidateGameParameters(framesStringsList, framesList, maxFramesNumber, startingPinsNumber);

            foreach (var frame in framesStringsList)
            {
                if (!framesList.Any() || framesList.Last().IsFrameOver)
                {
                    var isFinalFrame = framesList.Count == maxFramesNumber - 1;
                    framesList.Add(new Frame(isFinalFrame, startingPinsNumber));
                }
                FrameRepository _framerepo = new FrameRepository();
                _framerepo.ProcessFrameStringIntoFrameProperties(frame, framesList, maxFramesNumber, startingPinsNumber);
            }

            if (framesList.Last().IsFinalFrame&& (framesList.Last().IsStrike || framesList.Last().IsSpare))
            {
                framesList.Last().IsBonusAllowed = true;
            }

            AddBonusToTheLastFrame(framesList.Last(), startingPinsNumber, bonusString);
        }