package sudoku.structure;

import java.util.ArrayList;
import java.util.List;

/**
 * Class qui représente les Block de chaque Sudoku,
 * Un Block étant un ensemble de cellule avec une contrainte de block qui lui
 * ait associé.
 */
public class Block {

	// <editor-fold defaultstate="collapsed" desc="ATTRIBUTS">

	/**
	 * L'ensemble des cellules du block.
	 */
	private final List<Cell> cells;

	/**
	 * Liste de Sudoku qui contiennent le block
	 * Pour un accès plus rapide aux sudokus.
	 */
	private final List<Sudoku> sudokus;

	// </editor-fold>

	// <editor-fold defaultstate="collapsed" desc="METHODES">

	/**
	 * Crée un Block avec une liste de Cell donnée.
	 * @param cells List<Cell>
	 */
	public Block(List<Cell> cells) {
		this.cells = cells;
		this.sudokus = new ArrayList<>();
	}

	/**
	 * Crée un Block avec une liste de Cell vide.
	 */
	public Block() {
		this(new ArrayList<>());
	}

	public List<Cell> getCells() {
		return cells;
	}
	public List<Sudoku> getSudokus() {
		return sudokus;
	}

	/**
	 * Ajoute une Cell au Block
	 * 
	 * @param newCell Cell, à ajouter
	 */
	public void addCell(Cell newCell) {
		this.cells.add(newCell);
	}

	/**
	 * Cherche si le Block contient déjà un symbole donné.
	 * 
	 * @param symbolIndex int, un index de symbole
	 * @return boolean, true s'il contient le symbole et false sinon
	 */
	public boolean containsSymbol(int symbolIndex) {
		for (Cell cell : getCells()) {
			if (cell.getSymbolIndex() == symbolIndex)
				return true;
		}
		return false;
	}

	// </editor-fold>
}
