package client.view.accueil;

//------------------------------------Importations des différentes bibliothèques---------------------------------//

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

import client.Application;
import client.ApplicationHelper;
import client.control.Command;
import client.control.EcouteurGoTo;
import client.model.group.Groupe;
import client.view.accueil.button.ButtonDisconnect;
import client.view.accueil.button.ButtonGoTo;

//-----------------------------------Fin Importations des différentes bibliothèques------------------------------//





//-------------------------------------------------Début de la classe------------------------------------------------//

/**<u><b>Explication générale de la classe :</b></u>
 * <P>Cette classe permet de gérer le panel accueil.
 *
 * @author Dream Team - ING2
 */
public class PanelAccueil extends JPanel implements ActionListener {

    //Declaration des variables
    private static PanelAccueil panSingleton = null;
    private TitledBorder titleInfo;
    private JList listOfActivite;
    private JLabel phraseWelcome,titreGroup;
    private JComboBox groupAccueilBox;
                           
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de créer un singleton du panel accueil
     * 
     * @return une unique instance du panel accueil
     * 
     */
    public static PanelAccueil getInstance(){
        if(panSingleton == null){
            panSingleton = new PanelAccueil();
        }
        return panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Constructeur permettant de créer le panel contenant l'ensemble des onglets.
     * 
     */
    private PanelAccueil() {

        //Titre du Panel
        titleInfo = new TitledBorder("Accueil Principal");
        titleInfo.setTitleColor(Color.BLUE);
        this.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.BLUE));
        this.setBorder(BorderFactory.createTitledBorder(titleInfo));

        //Add the tabbed pane to this panel.
        this.setLayout(null);
        this.setBackground(new Color(234, 232, 233));

        //Titre Bienvenue
        phraseWelcome = new JLabel("<html><i>Bienvenue "+Application.getInstance().getUser(Application.idSelect).getLogin()+" \n[Dernière connexion le ??/??/??]</i></html>");
        phraseWelcome.setBounds(250, 30, 550, 15);
        add(phraseWelcome);

        //Groupes
        titreGroup = new JLabel("Groupes :");
        titreGroup.setBounds(50, 150, 135, 15);
        add(titreGroup);

        //On remplit les groupes auxquels appartient l'utilisateur.
        groupAccueilBox = new JComboBox();
        groupAccueilBox.setBounds(50, 180, 250, 20);
        add(groupAccueilBox);

        //Aller à
        ButtonGoTo bgt = new ButtonGoTo(this);
        bgt.addActionListener(new EcouteurGoTo());
        add(bgt);

        //Disconnect
        ButtonDisconnect bd = new ButtonDisconnect(this);
        add(bd);

        //Titre activité
        phraseWelcome = new JLabel("<html><i>Les dernières activités effectuées dans OPTIM'EISTI :</i></html>");
        phraseWelcome.setBounds(500, 150, 350, 25);
        add(phraseWelcome);

        //Liste activité
        listOfActivite = new JList();
        listOfActivite.setBackground(new Color(234, 232, 233));
        listOfActivite.setBounds(500, 180, 300, 230);
        add(listOfActivite);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de remplir la JComboBox des groupes
     * 
     */
    public void remplirGroupeBox(){
        groupAccueilBox.removeAllItems();
        groupAccueilBox.addItem("--------------------------------------------");
        Map<Integer,Groupe> groupsOfUser = ApplicationHelper.GroupsOfUser(Application.idSelect);

        for(Iterator<Groupe> g = groupsOfUser.values().iterator();g.hasNext();){
            groupAccueilBox.addItem(g.next().getNomGroupe());
        }
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer les activités récentes
     * 
     * @return les activités récentes
     * 
     */
    public JList getListOfActivite() {
        return listOfActivite;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle référence des activités récentes
     * 
     * @param listOfActivite nouvelle référence des activités récentes
     * 
     */
    public void setListOfActivite(JList listOfActivite) {
        this.listOfActivite = listOfActivite;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la JComboBox des groupes
     * 
     * @return JComboBox des groupes
     * 
     */
    public JComboBox getGroupAccueilBox() {
        return groupAccueilBox;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le singleton
     * 
     * @return singleton du panel accueil
     * 
     */
    public static PanelAccueil getPanSingleton() {
        return panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de mettre une nouvelle référence de singleton
     * 
     * @param panSingleton nouvelle référence du singleton du panel accueil
     * 
     */
    public static void setPanSingleton(PanelAccueil panSingleton) {
        PanelAccueil.panSingleton = panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'effectuer la fonction "execute" lorsqu'il y a une action
     * 
     * @param e Evènement souris
     * 
     */
    public void actionPerformed(ActionEvent e) {
        Command c = (Command)e.getSource();
        c.execute();
    }
    
}

//-------------------------------------------------Fin de la classe-------------------------------------------------//

