package sudoku.solver;

import java.util.concurrent.CancellationException;

import sudoku.structure.MultiDoku;
import sudoku.structure.Sudoku;

/**
 * Class de test non utilisé
 */
public class StupidSolver {

	private static boolean solve(Sudoku sudoku, int index) {
		// mécanisme d'abandon
		if (Thread.interrupted())
			throw new CancellationException("User wants to stop the solver");

		// si tout est bon avant, on a gagné
		if (!sudoku.isValidCoords(index))
			return true;

		// si la case n'est pas modifiable, on passe à la suivante
		if (!sudoku.getCell(index).isMutable())
			return solve(sudoku, index + 1);

		for (int symbol = 0; symbol < sudoku.getSize(); symbol++) {
			if (sudoku.getCell(index).trySetValue(symbol)) {
				// on tente de placer sur la case suivante
				if (solve(sudoku, index + 1)) {
					return true;
				}
			}
		}
		// on a tout essayé et rien n'a fonctionné
		sudoku.getCell(index).empty();
		return false;
	}

	public static boolean solve(MultiDoku doku) {
		if (doku.isSolved())
			return true;

		for (Sudoku sudoku : doku.getSubGrids()) {
			if (!solve(sudoku, 0))
				return false;
		}
		return true;
	}

}
