bool TableauToFoundation::PerformMovement(BoardLayout* layout)
{
  assert(layout);
  bool movement_performed;
  PileSet* pile_set = layout->GetPileSet();
  assert(pile_set);
  Card* card = NULL;
  Tableau* tableau = (*(pile_set->GetTableaus()))[m_origin_tableau];

  if(!tableau || (tableau->Size() == 0)) {
    movement_performed = false;
  }
  else {
    card = tableau->BottomCard();
    Foundation* foundation = pile_set->GetFoundation(card->GetSuit());
    if(!card || !foundation || !foundation->Push(card)) {
      // QUIT
      if(!card) {
        std::cout << "NO CARD IN TABLEAU:" << card->ToShortString();
      }
      else {
        std::cout << "CARD:" << card->ToShortString();
      }
      //

      movement_performed = false;
    }
    else {
      tableau->Pop();
      movement_performed = true;
    }

  }
  m_complete = false;
  return movement_performed;
}
void InterfaceDrawVisitor::DrawTableausInLine(std::vector<Tableau*>* tableaus,
                                              const uint8_t& line) const
{
  assert(tableaus);
  for (auto tableau_it : *tableaus) {
    Card* card = tableau_it->CardAt(line);
    if(card) {
      std::cout.width(6);
      std::cout << std::right << card->ToShortString();
    }
    else {
      std::cout.width(6);
      std::cout << std::right << "";
    }
  }
}