package client.model.benchmark;

import java.util.ArrayList;

import client.model.problem.Resultat;

/** <u><b>Explication générale de la classe :</b></u>
 * <P>Cette classe permet de créer un Benchmark
 *
 * @author Dream Team - ING2
 */
public class Benchmarks {
	
	// Decleration des variables
	private int idBenchmark;
    private Solution solution;
    private ArrayList<Resultat> arrayResultOfBenchmark;
    
    private static int idGenerator = -1;

    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer un objet de type Benchmarks.
     * 
     */
    public Benchmarks(){
    	this.idBenchmark = ++idGenerator;
        arrayResultOfBenchmark = new ArrayList<Resultat>(); 
    }

    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'id du benchmark
     * 
     * @return id du benchmark
     * 
     */
	public int getIdBenchmark() {
		return idBenchmark;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle valeur à l'id d'un benchmark
     * 
     * @param idBenchmark du nouveau benchmark
     * 
     */
	public void setIdBenchmark(int idBenchmark) {
		this.idBenchmark = idBenchmark;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la solution
     * 
     * @return la solution du benchmark
     * 
     */
	public Solution getSolution() {
		return solution;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle valeur à la solution
     * 
     * @param solution nouvelle solution
     * 
     */
	public void setSolution(Solution solution) {
		this.solution = solution;
	}

	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de rajouter un résultat
     * 
     * @param r résultat à ajouter
     * 
     */
	public void addResultat(Resultat r){
    	arrayResultOfBenchmark.add(r);
    }
    
	/**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de supprimer un résultat
     * 
     * @param i id du résultat
     * 
     */
    public void removeResultat(int i){
    	arrayResultOfBenchmark.remove(i);
    }
    
    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le résultat
     * 
     * @return id du résultat à recherché
     * 
     */
    public Resultat getResultat(int i){
    	return arrayResultOfBenchmark.get(i);
    }
    
    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la taille de l'array
     * 
     */
    public int sizeOfArrayResult(){
    	return arrayResultOfBenchmark.size();
    }
    
    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer un iterable des résultats
     * 
     * @return iterable des résultat
     * 
     */
    public Iterable<Resultat> getResults() {
        return arrayResultOfBenchmark;
    }
    
    /**<u><i>Explication générale de la méthode :</i></u>
     * <P> Cette méthode permet d'afficher le triplet d'informations
     * 
     * @return le triplet d'informations
     * 
     */
    public String toString(){
    	String s = new String();
    	for(int i=0;i<arrayResultOfBenchmark.size();i++){
    		s += "		resultat N°"+i+" : "+arrayResultOfBenchmark.get(i).toString()+"\n";
    	}
		return "- idBenchmark : "+idBenchmark+"\n- solution : "+solution.toString()+"\n- resultat : "+s;
    	
    }

}
