package controller.console.eleve;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

import view.console.eleve.Menu;

import model.Eleve;
import model.Session;

import controller.Database;

public class MenuControle {
	private Scanner sc;
	private ArrayList<Session> ses_enCours;
	private ArrayList<Session> ses_fini;
	private int input;
	
	public MenuControle(Database d, Eleve e_connected) {
		boolean done = false;
		this.sc = new Scanner(System.in);
		this.ses_enCours = d.getSessions().getEnCours(true);
		this.ses_fini = d.getSessions().getEnCours(false);
		
		Menu.trigger();
		while (!done) {
			try {
				Menu.askSession(this.ses_enCours, this.ses_fini);
				this.askInput();
				if (input == 0) {
					done = true;
				} else if (input <= this.ses_enCours.size()) {
					Session_RenduControle srdc = new Session_RenduControle(e_connected, this.ses_enCours.get(input-1), d.getRendus().getListe());
					srdc.terminate(d.getRendus());
				} else {
					Session_ResultatControle srsc = new Session_ResultatControle(this.ses_fini.get(input-1-this.ses_enCours.size()), e_connected, d.getRendus().getListe());
					srsc.close();
				}
			} catch (InputMismatchException e) {
				sc.nextLine();
				Menu.fail(0, d.getListeSessions().size());
			} catch (Session_RenduControle.NoEntry e) {
				
			}
		}
		
	}
	
	private void askInput() throws InputMismatchException {
		input = sc.nextInt();
		if ((input < 0) || (input > this.ses_enCours.size() + this.ses_fini.size())) {
			throw new InputMismatchException();
		}
		sc.nextLine();
	}
	
	public void close() {
		Menu.close();
	}
}
