package service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;

public class Quiz implements Runnable {
	Thread t;
	Socket socket;
	ArrayList<Question> questions;

	public Quiz(Socket socket) {
		this.socket = socket;
		questions = new ArrayList<Question>();
		questions.add(new Question("Quelle est l'année de la révolution française ?", "1789"));
		questions.add(new Question("Quel est la capitale de l'Ouganda ?", "Kampala"));
		questions.add(new Question("Quelle est la couleur du cheval blanc d'Henri IV?", "Blanc"));
		questions.add(new Question("Quelle est la l'année du sacre de Napoléon", "1804"));
	}

	public void lancer() {
		this.t = new Thread(this);
		t.start();
	}

	@Override
	public void run() {
		try {
			// Ouverture des flux
			BufferedReader networkIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			PrintWriter networkOut = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
			String feedback = "";
			int score = 0;
			for (Question q : questions) {
				// Ecriture de la question
				networkOut.println(q.getQuestion());
				System.out.println("Envoie de la question à " + socket.getInetAddress());

				// Lecture
				String chaine = networkIn.readLine();
				System.out.println("\"" + chaine + "\" " + "reçue de " + socket.getInetAddress());

				// Traitement
				feedback = chaine.equals(q.getRéponse()) ? "C'est vrai !" : "C'est faux !";
				if (chaine.equals(q.getRéponse())) {
					feedback = "Vrai";
					score++;
				} else {
					feedback = "Faux";
				}
				// Ecriture
				System.out.println(chaine + " " + feedback);
			}
			networkOut.println("Quiz terminé ! Votre score est : " + score + "\n Déconnexion...");
			socket.close();

		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	@Override
	protected void finalize() {
		try {
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
