package controller;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import model.list.*;
import model.*;

public class Database {
	private HandlerModules modules;
	private HandlerPromotions promotions;
	private HandlerUtilisateurs utilisateurs;
	private HandlerQCM qcms;
	private HandlerSessions sessions;
	private HandlerRendus rendus;
	
	public Database() {
		try {
			SAXParserFactory factory = SAXParserFactory.newInstance();
			SAXParser parser = factory.newSAXParser();
			File fUtil = new File("bin/data/Utilisateur.xml");
			File fMod = new File("bin/data/Module.xml");
			File fPromo = new File("bin/data/Promotion.xml");
			File fQCM = new File("bin/data/QCM.xml");
			File fSess = new File("bin/data/Session.xml");
			File fRendu = new File("bin/data/Rendu.xml");
			
			this.modules = new HandlerModules();
			parser.parse(fMod, this.modules);
			this.utilisateurs = new HandlerUtilisateurs(this.modules.getListe());
			parser.parse(fUtil, this.utilisateurs);
			this.promotions = new HandlerPromotions(this.utilisateurs.getListe());
			parser.parse(fPromo, this.promotions);
			this.qcms = new HandlerQCM(this.utilisateurs.getListe());
			parser.parse(fQCM, this.qcms);
			this.sessions = new HandlerSessions(this.utilisateurs.getListe(),
												this.promotions.getListe(),
												this.modules.getListe(),
												this.qcms.getListe());
			parser.parse(fSess, this.sessions);
			this.rendus = new HandlerRendus(this.utilisateurs.getListe(), this.sessions.getListe());
			parser.parse(fRendu, this.rendus);
		} catch (SAXException e) {
			System.out.println("Error: SAXException: "+e.getMessage());
		} catch (IOException e) {
			System.out.println("Error: IOException: "+e.getMessage());
		} catch (ParserConfigurationException e) {
			System.out.println("Error: ParserConfigurationException: "+e.getMessage());
		}
	}
	
	public ArrayList<Module> getListeModules() {
		return this.modules.getListe();
	}
	
	public ArrayList<Promotion> getListePromotions() {
		return this.promotions.getListe();
	}
	
	public ArrayList<Utilisateur> getListeUtilisateurs() {
		return this.utilisateurs.getListe();
	}
	
	public ArrayList<QCM> getListeQCM() {
		return this.qcms.getListe();
	}
	
	public ArrayList<Session> getListeSessions() {
		return this.sessions.getListe();
	}
	
	public ArrayList<Rendu> getListeRendus() {
		return this.rendus.getListe();
	}

	public HandlerModules getModules() {
		return modules;
	}

	public HandlerPromotions getPromotions() {
		return promotions;
	}

	public HandlerUtilisateurs getUtilisateurs() {
		return utilisateurs;
	}

	public HandlerQCM getQcms() {
		return qcms;
	}

	public HandlerSessions getSessions() {
		return sessions;
	}

	public HandlerRendus getRendus() {
		return rendus;
	}
}
