package controller;

import model.posteCharge.Machine;
import model.posteCharge.Operateur;
import model.posteCharge.PosteCharge;

/**
 * GestionPoste contient toutes les fonctions statiques pour gerer les listes des postes de charges, machines et operateurs dans la classe BaseDonnees
 * @see BaseDonnees#listePostes
 * @see BaseDonnees#listeMachines
 * @see BaseDonnees#listeOperateurs
 * @see model.posteCharge.Machine
 * @see model.posteCharge.Operateur
 * @see model.posteCharge.PosteCharge
 * @author Magic Penguins
 */
public class GestionPoste {

	/**
	 * Recherche et renvoie un poste de charge dans la liste a partir de sa reference
	 * @param reference
	 * Reference du poste de charge
	 * @return Poste de charge recherche
	 */
	public static PosteCharge getPoste(String reference){
		for (int i=0;i<BaseDonnees.listePostes.size();i++){
			if (reference.equals(BaseDonnees.listePostes.get(i).getReference())) return BaseDonnees.listePostes.get(i);
		}
		return null;
	}

	/**
	 * Recherche et renvoie un operateur dans la liste a partir de sa reference
	 * @param reference
	 * Reference de l'operateur
	 * @return Operateur recherche
	 */
	public static Operateur getOperateur(String reference){
		for (int i=0;i<BaseDonnees.listeOperateurs.size();i++){
			if (reference.equals(BaseDonnees.listeOperateurs.get(i).getReference())) return BaseDonnees.listeOperateurs.get(i);
		}
		return null;
	}

	/**
	 * Recherche et renvoie une machine dans la liste a partir de sa reference
	 * @param reference
	 * Reference de la machine
	 * @return Machine recherchee
	 */
	public static Machine getMachine(String reference){
		for (int i=0;i<BaseDonnees.listeMachines.size();i++){
			if (reference.equals(BaseDonnees.listeMachines.get(i).getReference())) return BaseDonnees.listeMachines.get(i);
		}
		return null;
	}

	/**
	 * Cree un poste de charge a partir des infos fournies
	 * @param nom
	 * Nom du poste de charge
	 */
	public static void creerPoste(String nom){
		BaseDonnees.listePostes.add(new PosteCharge(nom));
	}

	/**
	 * Cree un operateur a partir des infos fournies
	 * @param qualifications
	 * Qualifications de l'operateur
	 * @param nom
	 * Nom de l'operateur
	 */
	public static void creerOperateur(String qualifications, String nom){
		BaseDonnees.listeOperateurs.add(new Operateur(qualifications,nom));
	}

	/**
	 * Cree une machine a partir des infos fournies
	 * @param designation
	 * Designation de la machine
	 */
	public static void creerMachine(String designation){
		BaseDonnees.listeMachines.add(new Machine(designation));
	}

	/**
	 * Cree un poste de charge a partir d'un poste de charge existant
	 * @param poste
	 * Poste existant
	 */
	public static void creerPoste(PosteCharge poste){
		BaseDonnees.listePostes.add(poste);
	}

	/**
	 * Cree un operateur a partir d'un operateur existant
	 * @param operateur
	 * Operateur existant
	 */
	public static void creerOperateur(Operateur operateur){
		BaseDonnees.listeOperateurs.add(operateur);
	}

	/**
	 * Cree une machine a partir d'une machine existante
	 * @param machine
	 * Machine existante
	 */
	public static void creerMachine(Machine machine){
		BaseDonnees.listeMachines.add(machine);
	}

	/**
	 * Supprime un poste de charge a partir d'une reference
	 * @param reference
	 * Reference du poste de charge
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerPoste(String reference){
		for(int i=0;i<BaseDonnees.listePostes.size();i++){
			if (reference.equals((String) BaseDonnees.listePostes.get(i).getReference())){
				BaseDonnees.listePostes.remove(i);
				return true;
			}
		}
		return false;
	}

	/**
	 * Supprime un poste de charge a partir de sa position dans la liste
	 * @param pos
	 * Position du poste de charge dans la liste
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerPoste(int pos){
		if (pos<BaseDonnees.listePostes.size()){
			BaseDonnees.listePostes.remove(pos);
			return true;
		}
		else return false;
	}

	/**
	 * Supprime un operateur a partir d'une reference
	 * @param reference
	 * Reference de l'operateur
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerOperateur(String reference){
		for(int i=0;i<BaseDonnees.listeOperateurs.size();i++){
			if (reference.equals((String) BaseDonnees.listeOperateurs.get(i).getReference())){
				BaseDonnees.listeOperateurs.remove(i);
				return true;
			}
		}
		return false;
	}

	/**
	 * Supprime un operateur a partir de sa position dans la liste
	 * @param pos
	 * Position de l'operateur dans la liste
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerOperateur(int pos){
		if (pos<BaseDonnees.listeOperateurs.size()){
			BaseDonnees.listeOperateurs.remove(pos);
			return true;
		}
		else return false;
	}

	/**
	 * Supprime une machine a partir d'une reference
	 * @param reference
	 * Reference de la machine
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerMachine(String reference){
		for(int i=0;i<BaseDonnees.listeMachines.size();i++){
			if (reference.equals((String) BaseDonnees.listeMachines.get(i).getReference())){
				BaseDonnees.listeMachines.remove(i);
				return true;
			}
		}
		return false;
	}

	/**
	 * Supprime un machine a partir de sa position dans la liste
	 * @param pos
	 * Position de la machine dans la liste
	 * @return True si la suppression a reussie, false sinon
	 */
	public static boolean supprimerMachine(int pos){
		if (pos<BaseDonnees.listeMachines.size()){
			BaseDonnees.listeMachines.remove(pos);
			return true;
		}
		else return false;
	}
}
