package controller;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Vector;

import model.agent.Client;
import model.agent.Fournisseur;

public class GestionAgent {

	////////// Attributs //////////

	public static Vector<Client> listeClients;
	public static Vector<Fournisseur> listeFournisseurs;
	public static int cptClients;
	public static int cptFournisseurs;

	////////// Constructeurs //////////

	public GestionAgent(){
		listeClients = new Vector<Client>();
		listeFournisseurs = new Vector<Fournisseur>();
		cptClients = 1;
		cptFournisseurs = 1;
	}

	////////// Methodes //////////

	// Serialisation de l'ensemble des articles dans un fichier "agents.ser" a la racine du projet
	public static void sauvegarderArticles(){
		try {
			FileOutputStream fichier = new FileOutputStream("agents.ser");
			ObjectOutputStream oos = new ObjectOutputStream(fichier);
			oos.writeObject(listeClients);
			oos.writeObject(cptClients);
			oos.writeObject(listeFournisseurs);
			oos.writeObject(cptFournisseurs);
			oos.flush();
			oos.close();
		}
		catch (java.io.IOException e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	// Deserialisation des objets a partir du fichier "agents.ser" situe a la racine du projet
	public static void restaurerArticles(){
		try {
			FileInputStream fichier = new FileInputStream ("agents.ser");
			ObjectInputStream ois = new ObjectInputStream (fichier);
			listeClients = (Vector<Client>) ois.readObject();
			cptClients = (Integer) ois.readObject();
			listeFournisseurs = (Vector<Fournisseur>) ois.readObject();
			cptFournisseurs = (Integer) ois.readObject();
			ois.close();
		}
		catch (java.io.IOException e) {
			// Fin de la deserialisation
			// e.printStackTrace();
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// Recherche et renvoi d'un client dans la liste a partir de sa reference
	public static Client getClient(String reference){
		for (int i=0;i<listeClients.size();i++){
			if (reference.equals(listeClients.get(i).getReference())) return listeClients.get(i);
		}
		return null;
	}

	// Recherche et renvoi d'un fournisseur dans la liste a partir de sa reference
	public static Fournisseur getFournisseur(String reference){
		for (int i=0;i<listeFournisseurs.size();i++){
			if (reference.equals(listeFournisseurs.get(i).getReference())) return listeFournisseurs.get(i);
		}
		return null;
	}

	// Cree un client dans la liste a aprtir des informations donnees
	public static void creerClient(String nom){
		listeClients.add(new Client(nom));
	}

	// Cree un fournisseur dans la liste a partir des informations donnees
	public static void creerFournisseur(String nom){
		listeFournisseurs.add(new Fournisseur(nom));
	}

	// Supprime un client a partir d'une reference
	public static boolean supprimerClient(String reference){
		for(int i=0;i<listeClients.size();i++){
			if (reference.equals((String) listeClients.get(i).getReference())){
				listeClients.remove(i);
				return true;
			}
		}
		return false;
	}

	// Supprime un client a partir de sa position dans la liste
	public static boolean supprimerClient(int pos){
		if (pos<listeClients.size()){
			listeClients.remove(pos);
			return true;
		}
		else return false;
	}

	// Supprime un fournisseur a partir d'une reference
	public static boolean supprimerFournisseur(String reference){
		for(int i=0;i<listeFournisseurs.size();i++){
			if (reference.equals((String) listeFournisseurs.get(i).getReference())){
				listeFournisseurs.remove(i);
				return true;
			}
		}
		return false;
	}

	// Supprime un fournisseur a partir de sa position dans la liste
	public static boolean supprimerFournisseur(int pos){
		if (pos<listeFournisseurs.size()){
			listeFournisseurs.remove(pos);
			return true;
		}
		else return false;
	}

}
