package com.corejsf;

public class QuizBean {
   private int currentProblem;
   private int tries;
   private int score;
   private String response;
   private String correctAnswer;

   // Poniżej zakodowano problemy na stałe. W rzeczywistej aplikacji
   // problemy najprawdopodobniej zostałyby odczytane z bazy danych.
   private Problem[] problems = {
      new Problem(
         "Jak brzmiał slogan reklamowy opisujący programowanie w Javie? Write once, ...",
         "run anywhere"),
      new Problem(
         "Jak wygląda reprezentacja szesnastkowa czterech pierwszych bajtów każdego pliku klasy?",
         "CAFEBABE"),
      new Problem(
         "Co zostanie wyświetlone przez następujące wyrażenie? System.out.println(1+\"2\");",
         "12"),
      new Problem(
         "Które słowo kluczowe Javy służy do definiowania podklasy?",
         "extends"),
      new Problem(
         "Jak brzmiała oryginalna nazwa języka programowania Java?",
         "Oak"),
      new Problem(
         "Która klasa pakietu java.util opisuje punkt w czasie?",
         "Date")
   };

   public QuizBean() { startOver(); }

   // Właściwość question:
   public String getQuestion() {
      return problems[currentProblem].getQuestion();
   }

   // Właściwość answer:
   public String getAnswer() { return correctAnswer; }
   
   // Właściwość score:
   public int getScore() { return score; }

   // Właściwość response:
   public String getResponse() { return response; }
   public void setResponse(String newValue) { response = newValue; }

   public String answerAction() {
      tries++;
      if (problems[currentProblem].isCorrect(response)) {
         score++;
         nextProblem();
         if (currentProblem == problems.length) return "done";
         else return "success";
      }
      else if (tries == 1) {
         return "again";
      }
      else {
         nextProblem();
         if (currentProblem == problems.length) return "done";
         else return "failure";
      }
   }

   public String startOverAction() {
      startOver();
      return "startOver";
   }

   private void startOver() {
      currentProblem = 0;
      score = 0;
      tries = 0;
      response = "";
   }

   private void nextProblem() {
      correctAnswer = problems[currentProblem].getAnswer();
      currentProblem++;
      tries = 0;
      response = "";
   }
}
