package client.model.problem;

/** <u><b>Explication générale de la classe :</b></u>
 * <P>Cette classe permet de créer une méthode.
 *
 * @author Dream Team
 */
public class Methode {
	
	public static final int ID_METHODE_PAS_FIXE = 0;
	public static final int ID_METHODE_PAS_OPTIMAL = 1;
	public static final int ID_METHODE_NEWTON = 2;
	public static final int ID_METHODE_PROJECTION = 3;
	public static final int ID_METHODE_LAGRANGE = 4;
	public static final int ID_METHODE_PENALISATION = 5;
	public static final int ID_METHODE_RECUIT_SIMULE = 6;
	public static final int ID_METHODE_ALGO_EVOLUTIONNAIRE = 7;
	public static final int ID_METHODE_TABOU = 8;
	
	public static final String METHODE_PAS_FIXE = "Méthode du Gradient à pas fixe";
	public static final String METHODE_PAS_OPTIMAL = "Méthode du Gradient à pas optimal";
	public static final String METHODE_NEWTON = "Méthode de Newton";
	public static final String METHODE_PROJECTION = "Méthode de Projection";
	public static final String METHODE_LAGRANGE = "Méthode de Lagrange";
	public static final String METHODE_PENALISATION = "Méthode de Pénalisation";
	public static final String METHODE_RECUIT_SIMULE = "Méthode du Récuit Simulé";
	public static final String METHODE_ALGO_EVOLUTIONNAIRE = "Algorithme Evolutionnaire";
	public static final String METHODE_TABOU = "Méthode Tabou";
	
	
    //Déclaration des variables
    private int idMethode;
    private String nomMethode;

    public Methode(){}

    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer un objet de type Methode.
     * @param idMethode id permettant de reconnaître quel méthode à été utilisée
     * @param nomMethode Algorithme utilisé pour la méthode
     */
    public Methode(int idMethode, String nomMethode) {
        this.idMethode = idMethode;
        this.nomMethode = nomMethode;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'id utilisé.
	 *
     * @return id utilisé.
     * 
     */
    public int getIdMethode() {
        return idMethode;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner l'id d'une méthode.
     * 
     * @param idMethode id à assigner.
     * 
     */
    public void setIdMethode(int idMethode) {
        this.idMethode = idMethode;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne le nom de le methode.
     * 
     * @return nom de la methode.
     * 
     */
    public String getNomMethode() {
        return nomMethode;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un nom a une méthode.
     * 
     * @param nomMethode nom à assigner.
     * 
     */
    public void setNomMethode(String nomMethode) {
        this.nomMethode = nomMethode;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'id d'une méthode à partir de son nom
     * 
     * @param methode méthode à trouver
     * 
     */
    public static int getIdMethode(String methode){
    	if(methode.equals(METHODE_PAS_FIXE)){
    		return ID_METHODE_PAS_FIXE;
    	}else if(methode.equals(METHODE_PAS_OPTIMAL)){
    		return ID_METHODE_PAS_OPTIMAL;
    	}else if(methode.equals(METHODE_PENALISATION)){
    		return ID_METHODE_PENALISATION;
    	}else if(methode.equals(METHODE_PROJECTION)){
    		return ID_METHODE_PROJECTION;
    	}else if(methode.equals(METHODE_NEWTON)){
    		return ID_METHODE_NEWTON;
    	}else if(methode.equals(METHODE_LAGRANGE)){
    		return ID_METHODE_LAGRANGE;
    	}else if(methode.equals(METHODE_RECUIT_SIMULE)){
    		return ID_METHODE_RECUIT_SIMULE;
    	}else if(methode.equals(METHODE_TABOU)){
    		return ID_METHODE_TABOU;
    	}else if(methode.equals(METHODE_ALGO_EVOLUTIONNAIRE)){
    		return ID_METHODE_ALGO_EVOLUTIONNAIRE;
    	}
    	return -1;
    }
}
