/// <summary>
        /// Retrieves a list of all possible moves for each pokemon at the given level (whether by TM, HM, breeding or leveling up).
        /// Uses this list of moves to give each pokemon four moves. Uses a TMBank of all possible TM's available in the game to make sure that
        /// no team is unrealistically stacked with many TM's. Once a pokemon uses a TM to learn a move, that TM is consumed and can not be used by any other pokemon
        /// on the team.
        /// </summary>
        /// <param name="poke">Pokemon to choose for.</param>
        /// <param name="level">The level of each pokemon.</param>
        public Pokemon AssignMoves(Pokemon poke, int level)
        {
            var tmBank = _pokemonRepository.GetTMs().ToList();
            var moves  = _pokemonRepository.GetMovesForPokemon(poke.SpeciesId, level).ToList();

            return(AssignMovestoPokemon(poke, moves, tmBank));
        }