package client.model.user;

import java.util.ArrayList;

import client.model.group.Groupe;

/** <u><b>Explication générale de la classe :</b></u>
 * <P> Cette classe permet de créer une personne.
 *
 * @author Dream Team - ING2
 */
public class Utilisateur {
	
	private static int idGenerator = -1;

    //Déclaration des variables
    private int idPersonne;
    private String login;
    private String password;
    private Role rolePersonne;

    private ArrayList<Groupe> vectGroupe;

    private String[] tabActivities;

    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer un objet de type Personne.
     */
    public Utilisateur() {
    	vectGroupe = new ArrayList<Groupe>();
        
        tabActivities = new String[4];

        tabActivities[0] = "";
        tabActivities[1] = "";
        tabActivities[2] = "";
        tabActivities[3] = "0";
    }
    
    /**<u><i>Explication générale du constructeur :</i></u>
     * <P> Constructeur de la classe permettant de créer un objet de type Personne.
     * On initialise la collection de groupe.
     * 
     * @param login Login de la personne
     * @param password de la personne
     * 
     */
    public Utilisateur(String login, String password) {
        this.idPersonne = ++idGenerator;
        this.login = login;
        this.password = password;
        
        vectGroupe = new ArrayList<Groupe>();

        tabActivities = new String[4];

        tabActivities[0] = "";
        tabActivities[1] = "";
        tabActivities[2] = "";
        tabActivities[3] = "0";
    }

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

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


    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne le login de la personne.
     * 
     * @return Login de la personne.
     * 
     */
    public String getLogin() {
        return login;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un login à la personne
     * 
     * @param login Login à assigner
     * 
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne le password de la personne.
     * 
     * @return Password de la personne.
     * 
     */
    public String getPassword() {
        return password;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un password.
     * 
     * @param password Mot de passe à assigner à la personne
     * 
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne le role de la personne.
     * 
     * @return role de la personne.
     * 
     */
    public Role getRolePersonne() {
        return rolePersonne;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un role.
     * 
     * @param rolePersonne role à assigner à la personne
     * 
     */
    public void setRolePersonne(Role rolePersonne) {
        this.rolePersonne = rolePersonne;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'array des groupes.
     * 
     * @return l'array des groupes
     */
    public ArrayList<Groupe> getVectGroupe() {
        return vectGroupe;
    }

    /**
     *
     * @param vectGroupe
     */
    public void setVectGroupe(ArrayList<Groupe> vectGroupe) {
        this.vectGroupe = vectGroupe;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode ajoute un groupe à l'arrayList.
     * 
     * @param group Groupe que l'on ajoute
     * 
     */
    public void ajouterGroupe(Groupe group){
        this.vectGroupe.add(group);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode supprime un groupe.
     * 
     * @param i index du groupe à supprimer
     * 
     */
    public void supprimerGroupe(int i){
        this.vectGroupe.remove(i);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne le groupe à l'index i.
     * 
     * @param i index du groupe
     * 
     * @return groupe se trouvant à l'index i
     * 
     */
    public Groupe getGroupe(int i){
        return this.vectGroupe.get(i);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'array des activités
     * 
     * @return l'array des activités
     * 
     */
    public String[] getTabActivities() {
        return tabActivities;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode assigne une nouvelle référence de l'array des activités
     * 
     * @param tabActivities nouvelle référence de l'array des activités
     * 
     */
    public void setTabActivities(String[] tabActivities) {
        this.tabActivities = tabActivities;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'égalité entre deux utilisateurs.
     * 
     * @param u Utilisateur comparé
     * 
     * @return Vrai si les deux utilisateurs sont identiques
     * 
     */
    public boolean equals(Utilisateur u){
        if((this.getLogin().equals(u.getLogin())) && (this.getPassword().equals(u.getPassword()))){
            return true;
        }
        return false;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'array des activités
     * 
     * @return l'array des activités d'un utilisateur
     * 
     */
    public String[] displayActivities(){
        String[] tab = new String[3];
        if(!tabActivities[0].isEmpty())
            tab[0] = Character.toString((char)0x2022)+tabActivities[0];
        if(!tabActivities[1].isEmpty())
            tab[1] = Character.toString((char)0x2022)+tabActivities[1];
        if(!tabActivities[2].isEmpty())
            tab[2] = Character.toString((char)0x2022)+tabActivities[2];
        
        return tab;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'ajouter une activité
     * 
     * @param activity activité à ajouter
     * 
     */
    public void addActivity(String activity){
        int id = Integer.parseInt(tabActivities[3]);
        tabActivities[id] = activity;
        tabActivities[3] = ""+((id+1)%3);
    }

}
