private void RefreshBoard(decimal[] equities, Street street)
        {
            foreach (ReplayerTableState replayerTableState in TableStateList.Where(st => st.CurrentStreet == street))
            {
                try
                {
                    _playerInState = PlayersCollection.FirstOrDefault(u => u.Name == replayerTableState.CurrentAction.PlayerName);
                    if (_playerInState != null &&
                        ActivePlayerHasHoleCard.FirstOrDefault(x => x.PlayerName == replayerTableState.CurrentAction.PlayerName) != null &&
                        replayerTableState.CurrentAction != null &&
                        ActivePlayerHasHoleCard.Count > 1)
                    {
                        replayerTableState.ActivePlayer.EquityWin = equities[ActivePlayerHasHoleCard.IndexOf(ActivePlayerHasHoleCard.FirstOrDefault(x => x.PlayerName == replayerTableState.CurrentAction.PlayerName))];
                    }
                    else
                    {
                        replayerTableState.ActivePlayer.EquityWin = -1;
                    }


                    ReplayerPlayerViewModel.CopyEquityWin(replayerTableState.ActivePlayer, _playerInState);
                }
                catch (Exception ex)
                {
                    LogProvider.Log.Error(typeof(Converter), $"Player with name '{replayerTableState.CurrentAction.PlayerName}' has not been found in PlayerCollection in method RefreshBoard in ReplayerViewModel class", ex);
                }
            }
        }
        private void UpdatePlayersEquityWin(ReplayerTableState state)
        {
            if (state == null)
            {
                return;
            }

            //preparing for formula Card on the Board in dependence of street in current state
            switch (state.CurrentAction.Street)
            {
            case Street.Preflop:
                CurrentBoard      = new Card[] { };
                CurrentBoardCards = string.Empty;
                break;

            case Street.Flop:
                CurrentBoard      = CurrentGame.CommunityCards.Take(3).ToArray();
                CurrentBoardCards = new string(CurrentGame.CommunityCardsString.Take(6).ToArray());
                break;

            case Street.Turn:
                CurrentBoard      = CurrentGame.CommunityCards.Take(4).ToArray();
                CurrentBoardCards = new string(CurrentGame.CommunityCardsString.Take(8).ToArray());
                break;

            case Street.River:
                CurrentBoard      = CurrentGame.CommunityCards.ToArray();
                CurrentBoardCards = CurrentGame.CommunityCardsString;
                break;

            case Street.Showdown:
                CurrentBoard      = CurrentGame.CommunityCards.ToArray();
                CurrentBoardCards = CurrentGame.CommunityCardsString;
                break;

            case Street.Summary:
                CurrentBoard      = CurrentGame.CommunityCards.ToArray();
                CurrentBoardCards = CurrentGame.CommunityCardsString;
                break;
            }

            // finding all players having hole cards
            ActivePlayerHasHoleCard = CurrentGame.Players.Where(pl => pl.hasHoleCards).ToList();

            // searching for dead cards and removing this player from list of ActivePlayerHasHoleCard
            ActivePlayerHasHoleCardFolded = new List <Player>();

            AllDeadCards.Clear();

            foreach (ReplayerTableState replayerTableState in TableStateList)
            {
                Player playerInTableState = CurrentGame.Players.FirstOrDefault(x => x.PlayerName == replayerTableState.CurrentAction.PlayerName);

                if (playerInTableState != null &&
                    TableStateList.IndexOf(replayerTableState) <= TableStateList.IndexOf(state) &&
                    replayerTableState.CurrentAction.IsFold &&
                    playerInTableState.hasHoleCards)
                {
                    ActivePlayerHasHoleCardFolded.Add(playerInTableState);
                    ActivePlayerHasHoleCard.Remove(playerInTableState);
                    AllDeadCards.Add(playerInTableState.HoleCards);
                    AllDeadCardsString += playerInTableState.Cards;
                }
            }

            var equitySolver = ServiceLocator.Current.GetInstance <IEquitySolver>();

            var gameType = new GeneralGameTypeEnum().ParseGameType(CurrentGame.GameDescription.GameType);

            var isShortDeck = CurrentGame.GameDescription.TableTypeDescriptors.Contains(HandHistories.Objects.GameDescription.TableTypeDescription.ShortDeck);

            var equitySolverParams = new EquitySolverParams
            {
                PlayersCards = ActivePlayerHasHoleCard.Select(x => x.HoleCards).ToArray(),
                BoardCards   = CurrentBoard,
                Dead         = isShortDeck ?
                               AllDeadCards
                               .Distinct(new LambdaComparer <HoleCards>((x, y) => x.ToString().Equals(y.ToString())))
                               .SelectMany(x => x)
                               .Concat(CardGroup.GetDeadCardsForHoldem6Plus())
                               .ToArray() :
                               AllDeadCards
                               .Distinct(new LambdaComparer <HoleCards>((x, y) => x.ToString().Equals(y.ToString())))
                               .SelectMany(x => x)
                               .ToArray(),
                GameType = gameType
            };

            var equities = equitySolver.CalculateEquity(equitySolverParams)
                           .Select(x => Math.Round((decimal)x.Equity * 100, 2))
                           .ToArray();

            // updating states in replayer view
            if (equities != null)
            {
                RefreshBoard(equities, state.CurrentStreet);
            }

            //case of last state. Needed for All-in before River for some cases
            if (TableStateList.IndexOf(state) + 1 == TableStateList.Count &&
                equities != null)
            {
                // updating states in replayer view
                RefreshBoard(equities, Street.Preflop);
            }
        }