package controller;

import java.util.Vector;

import model.gammeOperatoire.GammeOperatoire;

/**
 * GestionGamme contient toutes les fonctions statiques pour gerer les gammes operatoires de la liste dans la classe BaseDonnees
 * @author Magic Penguins
 * @see BaseDonnees#listeGammes
 * @see model.gammeOperatoire.GammeOperatoire
 */
public class GestionGamme {

	/**
	 * Recherche et renvoie une gamme operatoire dans la liste a partir de sa reference
	 * @param reference
	 * Reference de la gamme operatoire
	 * @return La gamme operatoire recherchee
	 */
	public static GammeOperatoire getGamme(String reference){
		for (int i=0;i<BaseDonnees.listeGammes.size();i++){
			if (reference.equals(BaseDonnees.listeGammes.get(i).getReference())) return BaseDonnees.listeGammes.get(i);
		}
		return null;
	}

	/**
	 * Cree une gamme operatoire vide dans la liste
	 */
	public static void creerGamme(){
		BaseDonnees.listeGammes.add(new GammeOperatoire("Gamme operatoire "+BaseDonnees.cptGammes,false));
	}

	/**
	 * Cree une gamme operatoire dans la liste a partir d'une gamme existante
	 * @param gamme
	 * Gamme existante a ajouter
	 */
	public static void creerGamme(GammeOperatoire gamme){
		BaseDonnees.listeGammes.add(gamme);
	}

	/**
	 * Supprime une gamme operatoire a partir d'une reference
	 * @param reference
	 * Reference de la gamme operatoire
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerGamme(String reference){
		for(int i=0;i<BaseDonnees.listeGammes.size();i++){
			if (reference.equals((String) BaseDonnees.listeGammes.get(i).getReference())){
				BaseDonnees.listeGammes.remove(i);
				return true;
			}
		}
		return false;
	}

	/**
	 * Supprime une gamme operatoire a partir de sa position dans la liste
	 * @param pos
	 * Position de la gamme operatoire dans la liste
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerGamme(int pos){
		if (pos<BaseDonnees.listeGammes.size()){
			BaseDonnees.listeGammes.remove(pos);
			return true;
		}
		else return false;
	}
	
	/**
	 * Trouve les gammes operatoires qui sont des gammes de fabrication parmi la liste
	 * @return Une liste des gammes de fabrication
	 */
	public static Vector<GammeOperatoire> listeGammesFabrication(){
		Vector<GammeOperatoire> listeGammesFabrication = new Vector<GammeOperatoire>();
		for (int i=0;i<BaseDonnees.listeGammes.size();i++){
			if (BaseDonnees.listeGammes.get(i).isAssemblage()) listeGammesFabrication.add(BaseDonnees.listeGammes.get(i));
		}
		return listeGammesFabrication;
	}

}
