#ifndef HANOI_H
#define HANOI_H

#include <vector>

//-------------------------------------------------------------------------------

class Hanoi
{
   using Tower = std::vector<int>;

public:
   Hanoi(int);

   void play();

private:
   static bool hasTowerThisLevel(int level, const Tower& tower);
   void printLevel(int slice_size) const;
   void printEmptyLevel() const;
   void printLevelOfTower(int level, const Tower& tower) const;
   void printLevelOfTowers(int level) const;
   void printBasePlate() const;
   void printGame() const;
   void moveSlice(Tower& src, Tower& dest);
   void moveTower(int count, Tower& src, Tower& dest, Tower& util);

   Tower tower1;
   Tower tower2;
   Tower tower3;

   const int countx;

   int counter = 1;
};

//-------------------------------------------------------------------------------

#endif
