package client.model.group;

import java.util.ArrayList;

import client.model.user.Utilisateur;

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

    //Déclaration des variables
    private int idGroupe;
    private String nomGroupe;
    private Utilisateur responsableGroupe;
    private ArrayList<Integer> vectProbleme;
    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 Groupe.
     */
    public Groupe(){
        vectProbleme = new ArrayList<Integer>();
        
        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 Groupe.
     * On initialise la collection de personne.
     * On initialise la collection de probleme.
     * 
     * @param nomGroupe Nom du groupe
     */
    public Groupe(String nomGroupe){
        this.idGroupe = ++idGenerator;
        this.nomGroupe = nomGroupe;
        
        vectProbleme = new ArrayList<Integer>();

        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 du groupe.
     * <P>
     * @return Id du groupe.
     * 
     */
    public int getIdGroupe() {
        return idGroupe;
    }

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

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

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un nom à un groupe.
     * 
     * @param nomGroupe Nom à assigner au groupe
     * 
     */
    public void setNomGroupe(String nomGroupe) {
        this.nomGroupe = nomGroupe;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode retourne l'utilisateur responsable du groupe.
     * <P>
     * @return utilisateur responsable de groupe.
     * 
     */
    public Utilisateur getResponsableGroupe() {
        return responsableGroupe;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner un utilisateur responsable du groupe.
     * 
     * @param responsableGroupe utilisateur responsable du groupe a assigner
     * 
     */
    public void setResponsableGroupe(Utilisateur responsableGroupe) {
        this.responsableGroupe = responsableGroupe;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'array des id Problèmes du groupe
     * 
	 * @return l'array des id Problèmes du groupe
	 * 
	 */
	public ArrayList<Integer> getVectProbleme() {
		return vectProbleme;
	}

	/**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle référence de vectProbleme
     * 
	 * @param vectProbleme nouvelle référence de vectProbleme
	 * 
	 */
	public void setVectProbleme(ArrayList<Integer> vectProbleme) {
		this.vectProbleme = vectProbleme;
	}
    
	/**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'id du problème à l'indice i
     * 
     * @param i indice
     * 
	 * @return id du problème sélectionné
	 * 
	 */
    public int getIdProbleme(int i){
    	return vectProbleme.get(i);
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de supprimer un id problème
     * 
     * @param idProblem id du problème
	 * 
	 */
    public void removeIdProbleme(int idProblem){
    	for(int i=0;i<vectProbleme.size();i++){
    		if(vectProbleme.get(i) == idProblem)
    			vectProbleme.remove(i);
    	}
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'ajouter un id problème
     * 
     * @param i id du problème
	 * 
	 */
    public void addIdProbleme(int i){
    	vectProbleme.add(i);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer 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 permet de mettre un nouvel array des activités
     * 
     * @param tabActivities nouvel 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 permet d'afficher les activités récentes
     * 
     * @return l'array des activités
	 * 
	 */
    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 l'activité à rajouter
	 * 
	 */
    public void addActivity(String activity){
        int id = Integer.parseInt(tabActivities[3]);
        tabActivities[id] = activity;
        tabActivities[3] = ""+((id+1)%3);
    }

}
