#ifndef STRATEGY__H
#define STRATEGY__H

#include "Config.hpp"

class Strategy
{
  public :

  static inline std::pair<std::string, int> endMovement{"", 0};

  private :

  enum Type
  {
    Incremental,
    Sequential
  };

  Type type;
  std::map<std::pair<std::string, std::string>, std::string> edges;
  std::map<std::string, bool> isDone;
  std::vector<std::string> defaultCycle;
  std::string initialState{"UNDEFINED"};

  private :

  std::pair<std::string, int> getMovementSequential(const Config & c, const std::string & transition);
  std::pair<std::string, int> getMovementIncremental(const Config & c, const std::string & transition);

  public :

  Strategy(const std::vector<std::string_view> & lines);
  std::pair<std::string, int> getMovement(const Config & c, const std::string & transition);
  const std::string getInitialState() const;
};

#endif