public override PlayerTask GetMove(POGame poGame)
        {
            if (poGame.Turn != lastTurnCounter)
            {
                //Console.WriteLine("New turn " + poGame.Turn + "\n");
                actionsToDo.Clear();
                lastTurnCounter = poGame.Turn;

                mcts        = new MCTS(poGame);
                actionsToDo = mcts.run();
            }

            var player = poGame.CurrentPlayer;

            /*
             * Console.WriteLine("------------------------------------" + "\nCards on hand:\n" + String.Join(";\n", player.HandZone));
             * Console.WriteLine("\nCurrent Turn and Mana:\n" + poGame.Turn + ";\n" + player.RemainingMana);
             * Console.WriteLine("\nCurrent Health and Enemy Health:\n" + player.Hero.Health + ";\n" + player.Opponent.Hero.Health);
             *
             * Console.WriteLine("\nCards on enemy field:\n" + String.Join(";\n", player.Opponent.BoardZone));
             * if (player.Opponent.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health) > 0)
             * Console.WriteLine("Total taunt on enemy side:\n" + player.Opponent.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health));
             *
             * Console.WriteLine("\nCards on own field:\n" + String.Join(";\n", player.BoardZone));
             * if (player.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health) > 0)
             * Console.WriteLine("Total taunt on own side:\n" + player.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health));
             */

            if (actionsToDo.Any())
            {
                PlayerTask task = actionsToDo[0];
                actionsToDo.RemoveAt(0);
                return(task);
            }
            else
            {
                return(poGame.CurrentPlayer.Options().First(x => x.PlayerTaskType == PlayerTaskType.END_TURN));
            }



            /*
             *
             *          Root = new Node();
             *
             *          var player = poGame.CurrentPlayer;
             *
             *          // simple Mulligan Rule
             *          if (player.MulliganState == Mulligan.INPUT)
             *          {
             *                  List<int> mulligan = new MidRangeScore().MulliganRule().Invoke(player.Choice.Choices.Select(p => poGame.getGame().IdEntityDic[p]).ToList());
             *                  return ChooseTask.Mulligan(player, mulligan);
             *          }
             *
             *          // Get all valid options for this turn
             *          var validOpts = poGame.Simulate(player.Options()).Where(x => x.Value != null);
             *          validOpts.OrderBy(x => new MidRangeScore { Controller = player }.Rate());
             *
             *          // Build initial tree
             *          foreach (KeyValuePair<PlayerTask, POGame> actionState in validOpts)
             *          {
             *                  var appnode = new Node();
             *                  appnode.state = actionState.Value;
             *                  appnode.nodeAction = actionState.Key;
             *                  appnode.Q = new MidRangeScore { Controller = player }.Rate(); //might be wrong
             *                  Root.childNodes.Append<Node>(appnode);
             *          }
             *
             *          // Stats output
             *          List<PlayerTask> options = new List<PlayerTask>();
             *          if (validOpts.Any())
             *          {
             *                  Console.WriteLine("------------------------------------" + "\nCards on hand:\n" + String.Join(";\n", player.HandZone));
             *                  Console.WriteLine("\nCurrent Turn and Mana:\n" + poGame.Turn + ";\n" + player.RemainingMana);
             *                  Console.WriteLine("\nCurrent Health and Enemy Health:\n" + player.Hero.Health + ";\n" + player.Opponent.Hero.Health);
             *
             *                  Console.WriteLine("\nCards on enemy field:\n" + String.Join(";\n", player.Opponent.BoardZone));
             *                  if (player.Opponent.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health) > 0)
             *                          Console.WriteLine("Total taunt on enemy side:\n" + player.Opponent.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health));
             *
             *                  Console.WriteLine("\nCards on own field:\n" + String.Join(";\n", player.BoardZone));
             *                  if (player.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health) > 0)
             *                          Console.WriteLine("Total taunt on own side:\n" + player.BoardZone.Where(p => p.HasTaunt).Sum(p => p.Health));
             *
             *                  options = poGame.CurrentPlayer.Options();
             *
             *          }
             *          return options[Rnd.Next(options.Count)];
             */
        }