#pragma once

#include <optional>
#include <string>

#include "solver/cell.h"

class Puzzle {
 public:
  static Puzzle FromString(std::string puzzle);

  std::string CurrentState();
  std::string PencilMarkState();

  bool IsSolved();
  bool ApplyNextStep();

  void AssignSquare(uint8_t id, uint8_t value);

 private:
  Puzzle();
  std::array<Cell, 81> cells_;
};
