private void CalculateAdditionalData(PlayerMeritTableLine line, GameXPlayer playerGame, CompetitionEvent competitionEvent, MeritCalculationEngine config, IGameCalculationEngine engine, List <int> opponentScoresInWonGames,
                                             List <int> playerScoresInLostGames)
        {
            line.DataDecimal1 = CalculationHelper.CalculateAvLost(line, engine);
            line.DataDecimal2 = CalculationHelper.CalculateAvAll(line);

            if (config.EnableDropWorseResults)
            {
                this.SnapshotTotals(line);
                this.CalculateForDroppedGames(line, opponentScoresInWonGames, playerScoresInLostGames, competitionEvent.DataInt1.Value, competitionEvent.DataInt2.Value, engine);
            }

            line.DataString1 = ListHelper.ListToCsv(opponentScoresInWonGames);
            line.DataString2 = ListHelper.ListToCsv(playerScoresInLostGames);
        }
        public Task Remove(PlayerMeritTable playerMeritTable, GameXPlayer playerGame, Team team, CompetitionEvent competitionEvent, MeritCalculationEngine config)
        {
            var line = playerMeritTable.GetOrCreateLine(team, playerGame.Player);
            var gameCalculationEngine = this._gameCalculationEngineFactory.Create(playerGame.Game.GameCalculationEngineID);

            line.Remove(playerGame);
            var droppedChalks = gameCalculationEngine.CalculateDroppedChalks(playerGame);

            line.RemoveDroppedChalks(playerGame, droppedChalks);

            var opponentScoresInWonGames = ListHelper.ConvertToList(line.DataString1);
            var playerScoresInLostGames  = ListHelper.ConvertToList(line.DataString2);

            ListHelper.RemoveResultFromLists(playerGame, opponentScoresInWonGames, playerScoresInLostGames);

            this.CalculateAdditionalData(line, playerGame, competitionEvent, config, gameCalculationEngine, opponentScoresInWonGames, playerScoresInLostGames);

            return(Task.CompletedTask);
        }