private RiskyPickOffer GetOffer(RiskyPickGameBoard gameBoard)
        {
            var closedCases  = gameBoard.Cases.Values.Where(c => !c.IsOpened).ToList();
            var edgeCount    = closedCases.Sum(c => c.Edges);
            var tokenCount   = closedCases.Sum(c => RiskyPickGameBoard.TokensNumerator / c.Edges);
            var offerAverage = closedCases.Count();

            return(new RiskyPickOffer
            {
                Edges = (int)Math.Ceiling((decimal)edgeCount / offerAverage),
                Tokens = (int)Math.Ceiling((decimal)tokenCount / offerAverage),
                HighestRisk = closedCases.Max(c => c.Edges),
                LowestRisk = closedCases.Min(c => c.Edges),
            });
        }
        public override Result <Session> PerformCommand(Session session, string line)
        {
            return(Result.Ok(session.Clone())
                   .Ensure(s => !s.Domme.WasGreeted, "Risky Pick cannot be started from the Games window when there is a session in progress!")
                   .Ensure(s => s.GameBoard == null, "A new Risky Pick game cannot be started until the current game is finished!")
                   // .Ensure(s => s.GameBoard.EdgesOwed == 0, "You still owe edges from your previous game!")
                   .Ensure(s => s.Sub.Purse[TokenDenomination.Bronze] >= RiskyPickCost, "It costs 100 Bronze Tokens to play Risky Pick!")
                   .Ensure(s => File.Exists(_pathsAccessor.RiskyPickScript), _pathsAccessor.RiskyPickScript + " was not found.")
                   .OnSuccess(s =>
            {
                var smd = new ScriptMetaData
                {
                    Key = _pathsAccessor.RiskyPickScript,
                    Info = "Risky Pick Game. Similar to Deal or No Deal",
                    IsEnabled = true,
                    Name = "Risky Pick Game"
                };

                var script = new Script(smd, File.ReadAllLines(_pathsAccessor.RiskyPickScript));
                s.Sub.Purse[TokenDenomination.Bronze] = -RiskyPickCost;

                s.GameBoard = RiskyPickGameBoard.Create(GetRiskyPickCaseValues());

                OnCommandProcessed(s, script);

                //RiskyState = True
                //            mainWindow.ssh.RiskyDeal = True
                //            SetupRiskyPick()

                //            PlayRiskyPickButton.Text = ""
                //            PlayRiskyPickButton.Enabled = False

                //            mainWindow.ssh.StrokeTauntVal = -1

                //            If Directory.Exists(My.Settings.DomImageDir) AndAlso mainWindow.ssh.SlideshowLoaded Then
                //                mainWindow.LoadDommeImageFolder()
                //            End If
                //        s.BeginSession(script)
                return s;
            }));
        }