package de.uni.karlsruhe.aifb.prog2.solutions;

import de.uni.karlsruhe.aifb.prog2.chess.ChessboardDisplay;

import Prog1Tools.GameEngine;

/** Dieses Programm stellt alle moeglichen Loesungen
 *  des Achtdamen-Problems dar.
 */
public class EightQueenProblem extends ChessboardDisplay{

  /** Der Solver, der die Loesungen beinhaltet. */
  private Solver solver;

  /** Konstruktor. Der uebergebene Solver soll
   *  alle Loesungen des Problems beinhalten.
   */
  public EightQueenProblem(Solver solver) {
    // Rufe den Konstruktor der Superklasse
    // mit der Start-Situation aus
    super((BoardOfQueens) solver.get(0));
    // Speichere den Solver ab
    this.solver = solver;
    // Nun schalte zur naechsten Loesung
    toNext();
  }

  /** Schalte zur naechsten Loesung */
  private void toNext() {
    if (solver.isSolution())
      chessboard =
        (BoardOfQueens) solver.get(solver.getSteps());
    solver.toNext();
  }

  /** Gibt den Text zurueck, der aktuell auf dem
    * Feuer-Button stehen soll.
    **/
  public String getFireLabel() {
    return solver.isSolution() ? "Naechste Loesung"
                          : "Keine weitere Loesung";
  }

  /** Gibt den Namen des Spiels als String zurueck.
    **/
  public String getGameName() {
    return "AchtDamenProblem";
  }

  /** Signalisert, dass der Feuer-Button gedrueckt wurde.
    **/
  public void firePressed() {
    toNext();
  }

  /** Hauptprogramm */
  public static void main(String[] args) {
    Solver solver = new Solver(new BoardOfQueens(),8);
    new GameEngine(new EightQueenProblem(solver));
  }

}