package etf.kviz;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
// or import javax.enterprise.context.SessionScoped;

@ManagedBean(name = "quizBean") // or @Named
@SessionScoped
public class QuizBean implements Serializable {

    private int tekuciProblem;
    private int pokusaji;
    private int poeni;
    private String unetOdgovor = "";
    private String tacanOdgovor;

    // Ovaj deo je hardkodovan, u praksi treba iz baze podataka 
    // čitati i pitanja i odgovore
    private ArrayList<Problem> problemi = new ArrayList<Problem>(Arrays.asList(
            new Problem(
                    "Kako se zove jedini Srbin po kome je nazvana jedna međunarodna jedinica mere?",
                    "Nikola Tesla"),
            new Problem(
                    "Koje godine je rodjen Nikola Tesla?",
                    "1856"),
            new Problem(
                    "Koji evropski grad ima muzej Nikole Tesle?",
                    "Beograd"),
            new Problem(
                    "Ko je autor dela \"Od pašnjaka do naučenjaka\"?",
                    "Mihajlo Pupin"),
            new Problem(
                    "Mesto rođenja Mihajla Pupina zove se?",
                    "Idvor"),
            new Problem(
                    "Koji univerzitet u SAD je nazavao laboratoriju za fiziku u čast M.Pupina?",
                    "Kolumbija"),
            new Problem(
                    "Kako se zove Srbin tvorac najpreciznijeg kalendara na svetu?",
                    "Milutin Milankovic")));

    public String getPitanje() {
        return problemi.get(tekuciProblem).getPitanje();
    }

    public String getOdgovor() {
        return tacanOdgovor;
    }

    public int getPoeni() {
        return poeni;
    }

    public String getUnetOdgovor() {
        return unetOdgovor;
    }

    public void setUnetOdgovor(String noviOdgovor) {
        unetOdgovor = noviOdgovor;
    }

    public int getTekuciProblem() {
        return tekuciProblem;
    }

    public void setTekuciProblem(int novaVrednost) {
        tekuciProblem = novaVrednost;
        System.out.println("Nova vrednost: " + novaVrednost);
    }

    public String getPreskoci() {
        if (tekuciProblem < problemi.size() - 1) {
            return "index";
        } else {
            return "gotovo";
        }
    }

    public String proveraOdgovora() {
        pokusaji++;
        if (problemi.get(tekuciProblem).isCorrect(unetOdgovor)) {
            poeni++;
            sledeciProblem();
            if (tekuciProblem == problemi.size()) {
                return "gotovo";
            } else {
                return "uspesno";
            }
        } else if (pokusaji == 1) {
            return "ponovo";
        } else {
            sledeciProblem();
            if (tekuciProblem == problemi.size()) {
                return "gotovo";
            } else {
                return "neuspesno";
            }
        }
    }

    public String novaIgra() {
        Collections.shuffle(problemi);
        tekuciProblem = 0;
        poeni = 0;
        pokusaji = 0;
        unetOdgovor = "";
        return "ispocetka";
    }

    private void sledeciProblem() {
        tacanOdgovor = problemi.get(tekuciProblem).getOdgovor();
        tekuciProblem++;
        pokusaji = 0;
        unetOdgovor = "";
    }
}
