package controller.console.enseignant;

import java.util.ArrayList;
import java.util.Scanner;

import view.console.enseignant.Session_Consultation;

import model.Question;
import model.Rendu;
import model.Session;
import model.list.HandlerRendus;

public class Session_ConsultationControle {
	Scanner sc;
	
	Session session;
	ArrayList<Session> lSess;
	ArrayList<Rendu> lRendu;
	float moyenne;
	float variance;
	int[] freq_list;
	
	public Session_ConsultationControle(ArrayList<Session> lSess, ArrayList<Rendu> lRendu) {
		this.sc = new Scanner(System.in);
		this.lSess = lSess;
		this.lRendu = lRendu;
		
		Session_Consultation.trigger();
		Session_Consultation.showSessions(this.lSess);
		this.askSession();
		this.getStats();
	}
	
	private void askSession() {
		String str_input;
		int input;
		boolean done = false;

		while (!done) {
			str_input = sc.nextLine();
			try {
				input = Integer.parseInt(str_input);
				if ((input < 0) || (input > this.lSess.size())) {
					Session_Consultation.fail(0, this.lSess.size());
				} else if (input == 0) {
					done = true;
				} else {
					this.session = this.lSess.get(input-1);
					this.getStats();
					Session_Consultation.showStats(this.moyenne, this.variance, this.freq_list, this.session.getQcm());
				}
			} catch (NumberFormatException e) {
				Session_Consultation.fail(0, this.lSess.size());
			}
		}
	}
	
	private void getStats() {
		ArrayList<Rendu> listeRendus = HandlerRendus.getFromSession(this.session, this.lRendu);
		int i;
		int j;
		int index;
		float somme = 0f;
		float somme_carree = 0f;
		Question q_tmp;
		this.freq_list = new int[this.session.getQcm().getQuestions().size()];
		
		for (i = 0 ; i < this.session.getQcm().getQuestions().size(); i++) {
			this.freq_list[i] = 0;
		}
		
		for (i = 0 ; i < listeRendus.size() ; i++) {
			somme += listeRendus.get(i).getScore();
			somme_carree += listeRendus.get(i).getScore()*listeRendus.get(i).getScore();
			for (j = 0 ; j < listeRendus.get(i).getReponsesChoisies().size() ; j++) {
				if (listeRendus.get(i).getReponsesChoisies().get(j).isVraie()) {
					q_tmp = listeRendus.get(i).getReponsesChoisies().get(j).getQuestion(this.session.getQcm());
					index = this.session.getQcm().getQuestions().indexOf(q_tmp);
					this.freq_list[index]++;
				}
			}
		}
		this.moyenne = somme / listeRendus.size();
		this.variance = (somme_carree / listeRendus.size()) - (this.moyenne * this.moyenne);
	}
	
	public void close() {
		Session_Consultation.close();
	}
}
