package sudoku.structure;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

//TODO: doc
public class StateManager {

	private final Stack<Map<Cell, Integer>> states;
	private final MultiDoku doku;

	public StateManager(MultiDoku doku) {
		this.states = new Stack<>();
		this.doku = doku;
	}

	public void pushState() {
		states.add(new HashMap<>());
		saveState();
	}

	public void popState() {
		assert (states.size() > 0);
		restoreState();
		states.pop();
	}

	private void restoreState() {
		for (var entry : this.states.getLast().entrySet()) {
			entry.getKey().setSymbolIndex(entry.getValue());
		}
	}

	private void saveState() {
		for (Cell cell : this.doku.getCells()) {
			states.getLast().put(cell, cell.getSymbolIndex());
		}
	}

}
