package controller;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Vector;

import model.gammeOperatoire.GammeOperatoire;

public class GestionGamme {

	public static Vector<GammeOperatoire> listeGammes;

	public GestionGamme(){
		listeGammes = new Vector<GammeOperatoire>();
	}

	// Serialisation de l'ensemble des gammes operatoires dans un fichier "gammesoperatoires.ser" a la racine du projet
	public static void sauvegarderGammes(){
		try {
			FileOutputStream fichier = new FileOutputStream("gammesoperatoires.ser");
			ObjectOutputStream oos = new ObjectOutputStream(fichier);
			oos.writeObject(listeGammes);
			oos.flush();
			oos.close();
		}
		catch (java.io.IOException e) {
			e.printStackTrace();
		}
	}

	// Deserialisation des objets a partir du fichier "gammesoperatoires.ser" situe a la racine du projet
	@SuppressWarnings("unchecked")
	public static void restaurerGammes(){
		try {
			FileInputStream fichier = new FileInputStream ("gammesoperatoires.ser");
			ObjectInputStream ois = new ObjectInputStream (fichier);
			listeGammes = (Vector<GammeOperatoire>) ois.readObject();
			ois.close();
		}
		catch (java.io.IOException e) {
			// Fin de la deserialisation
			// e.printStackTrace();
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// Recherche et renvoi d'une gamme dans la liste a partir de sa reference
	public static GammeOperatoire getGamme(String reference){
		for (int i=0;i<listeGammes.size();i++){
			if (reference.equals(listeGammes.get(i).getReference())) return listeGammes.get(i);
		}
		return null;
	}

	// Cree une gamme vide dans la liste
	public static void creerGamme(){
		listeGammes.add(new GammeOperatoire("Gamme operatoire "+GammeOperatoire.compt,false));
	}

	// Cree une gamme dans la liste a partir d'une gamme existante
	public static void creerGamme(GammeOperatoire gamme){
		listeGammes.add(gamme);
	}

	// Supprime une gamme a partir d'une reference
	public static boolean supprimerGamme(String reference){
		for(int i=0;i<listeGammes.size();i++){
			if (reference.equals((String) listeGammes.get(i).getReference())){
				listeGammes.remove(i);
				return true;
			}
		}
		return false;
	}

	// Supprime une gamme a partir de sa position dans la liste
	public static boolean supprimerGamme(int pos){
		if (pos<listeGammes.size()){
			listeGammes.remove(pos);
			return true;
		}
		else return false;
	}
	
	public static Vector<GammeOperatoire> listeGammesProduction(){
		Vector<GammeOperatoire> listeGammesProduction = new Vector<GammeOperatoire>();
		for (int i=0;i<listeGammes.size();i++){
			if (listeGammes.get(i).isProduction()) listeGammesProduction.add(listeGammes.get(i));
		}
		return listeGammesProduction;
	}

}
