package client.model.user;

import java.util.ArrayList;
import java.util.Collection;


/** <u><b>Explication générale de la classe :</b></u>
 * <P>Cette classe permet de créer un rôle.
 *
 * @author Dream Team - ING2
 */
public class Role {

	private static int idGenerator = 0;

    //Déclaration des variables
    private String nomRole;
    private int idRole;
    private Collection<Integer> vectDroits;

    //Variables définissant les rôles
    public static final int IDADMINISTRATEUR = 1;
    public static final int IDRESPONSABLE = 2;
    public static final int IDMEMBRE = 3;

    public static final String ADMINISTRATEUR = "ADMINISTRATEUR";
    public static final String RESPONSABLE = "RESPONSABLE";
    public static final String MEMBRE = "MEMBRE";


    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer un objet de type Role.
     * 
     * @param nomRole Objet de type String permettant de récupérer le nom du role
     * 
     */
    public Role(String nomRole) {
        this.idRole = ++idGenerator;
        this.nomRole = nomRole;

        Droits droit = new Droits();

        if(idRole == IDADMINISTRATEUR){
            vectDroits = droit.rightOfAdmin();
        }else if(idRole == IDRESPONSABLE){
            vectDroits = droit.rightOfRespo();
        }else if(idRole == IDMEMBRE){
            vectDroits = droit.rightOfMember();
        }else{
            vectDroits = new ArrayList<Integer>();
        }
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'ajouter un droit au tableau des droits.
     * 
     * @param droit droit à ajouter
     * 
     */
    public void addRight(Integer droit){
        vectDroits.add(droit);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de supprimer un droit au tableau des droits.
     * 
     * @param droit droit à supprimer
     * 
     */
    public void deleteRight(Integer droit){
        vectDroits.remove(droit);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne le nom du rôle.
     * 
     * @return Nom du rôle.
     * 
     */
    public String getNomRole() {
        return nomRole;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un nom à un rôle.
     * 
     * @param nomRole Nom du rôle à assigner
     * 
     */
    public void setNomRole(String nomRole) {
        this.nomRole = nomRole;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle référence d'array de droits
     * 
     * @param vectDroits nouvelle référence d'array de droits
     * 
     */
    public void setDroits(Collection<Integer> vectDroits){
        this.vectDroits = vectDroits;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'array des droits
     * 
     * @return l'array des droits.
     * 
     */
    public Collection<Integer> getDroits() {
        return vectDroits;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'id du rôle.
     * 
     * @return id du rôle.
     * 
     */
    public int getIdRole() {
        return idRole;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvel id rôle
     * 
     * @param idRole nouvel id rôle
     * 
     */
    public void setIdRole(int idRole) {
        this.idRole = idRole;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de comparer deux rôles.
     * 
     * @return Vrai si les deux rôles sont identiques sinon Faux
     */
    public boolean equals(Role r2){
        if(this.nomRole.equals(r2.getNomRole()))
            return true;
        return false;
    }
    
}