public void LevelUp(IUnitOfWork unitOfWork, IStatApplier statApplier, Player player, AssignmentType completedAssignment)
        {
            var currentLevel = player.Level;
            var nextLevel = unitOfWork.LevelRepository.Get((level => level.LevelNumber == currentLevel + 1), null, "").FirstOrDefault();
            // TODO: Make several games on one API ? Check if right game fds
            if (nextLevel == null) return; // Max level reached

            // Check if experience reached
            if (player.Experience < nextLevel.ExperienceReq) return; // Not enough experience

            // Check general stats
            foreach (var generalStatAmountReq in nextLevel.GeneralStatsReq)
            {
                var playerGeneralStatAmount =
                    player.GeneralStats.FirstOrDefault(
                        u =>
                            u.StatEffect.AffectedStatBonus ==
                            generalStatAmountReq.StatEffect.AffectedStatBonus);
                if (playerGeneralStatAmount == null) throw new Exception("Database error, player has no such general stat entry");

                var res = generalStatAmountReq.CompareTo(playerGeneralStatAmount);
                if (res == 1)
                    return; // No level up
            }

            // Level up reached! DING DING DING
            player.Level += 1;
            player.JobPoints += nextLevel.JobPointReward;
            statApplier.ApplyGeneralStats(player, nextLevel.GeneralStatRewards);
        }
        public List<Achievement> CompleteTask(Player player, AssignmentType assignmentTypeCompleted)
        {
            // Apply general stats - bonuses from here included henceforth
            _statApplier.ApplyGeneralStats(player, assignmentTypeCompleted.GeneralStatRewards);

            // Apply experience TODO: ExperienceApplier, JobPointApplier - Combine to StatApplier
            _statApplier.ApplyExperience(player, assignmentTypeCompleted.ExpReward);

            // Check level up
            _levelUpChecker.LevelUp(_unitOfWork, _statApplier, player, assignmentTypeCompleted); // Levels up, assigns rewards if achieved

            // Add assignment to assignment list
            player.AssignmentsCompleted.Add(new Assignment{Type = assignmentTypeCompleted});

            // Check for achievements TODO: (Return achievementGet ??? fds)
            var achievements = _achievementChecker.CheckAchievements(_statApplier, _unitOfWork, player);

            return achievements;
        }