package client.view.respoGroup;

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.JPanel;
import javax.swing.border.TitledBorder;

import client.Application;
import client.ApplicationHelper;
import client.control.Command;
import client.control.group.EcouteurMembreAttenteRespo;
import client.control.group.EcouteurSupprimerGroupeActuel;
import client.model.user.Role;
import client.model.user.Utilisateur;
import client.view.admin.gestionGroup.button.ButtonAccepterUser;
import client.view.admin.gestionGroup.button.ButtonRefuserUser;
import client.view.respoGroup.button.ButtonSupprimerUserGroup;

/**
 *
 * @author Dream Team
 */
public class PanelGestionGroupeRespo extends JPanel implements ActionListener {

    private final TitledBorder titleInfo;
    private ButtonAccepterUser bau;
    private ButtonRefuserUser bru;
    private ButtonSupprimerUserGroup bsug;
    private String titreGroupe;
    private JLabel titreUser, titrePendingUser;
    private JComboBox userBox, userPendingBox;

    /**<u><i>Explication de la méthode :</i></u>
     * <P>Constructeur du panel permettant de gérer un groupe en tant que responsable groupe.
     */
    public PanelGestionGroupeRespo(String titreGroupe){

        this.titreGroupe = titreGroupe;

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

        this.setBackground(new Color(234, 232, 233));

        remplirPanelRespoGroup();
    }

//--------------------------------------------remplirPanelGroup-------------------------------------------------//
    /**<u><i>Explication de la méthode :</i></u>
     * <P>Cette méthode permet de remplir le panel groupe pour un responsable de groupe.
     */
    private void remplirPanelRespoGroup(){        

        //Supprimer un membre d'un groupe
        titreUser = new JLabel("Supprimer un membre :");
        titreUser.setBounds(50, 70, 150, 15);
        add(titreUser);

        userBox = new JComboBox();
        userBox.setBounds(50, 90, 250, 20);
        add(userBox);

        bsug = new ButtonSupprimerUserGroup(this);
        bsug.addActionListener(new EcouteurSupprimerGroupeActuel());
        add(bsug);

        //Membre en attente
        titrePendingUser = new JLabel("Membre en attente :");
        titrePendingUser.setBounds(50, 260, 135, 15);
        add(titrePendingUser);

        userPendingBox = new JComboBox();
        remplirUserPendingBox();
        userPendingBox.setBounds(50, 280, 250, 20);
        add(userPendingBox);

        EcouteurMembreAttenteRespo membreAttenteRespoListener = new EcouteurMembreAttenteRespo();
        
        //Accepter
        bau = new ButtonAccepterUser(this);
        bau.setActionCommand("ACCEPTER");
        bau.addActionListener(membreAttenteRespoListener);
        add(bau);

        //Refuser
        bru = new ButtonRefuserUser(this);
        bru.setActionCommand("REFUSER");
        bru.addActionListener(membreAttenteRespoListener);
        add(bru);
    }

//------------------------------------------Fin remplirPanelGroup-----------------------------------------------//


    
//-------------------------------------------remplirUserBoxRespoGroupe--------------------------------------------------//

    public final void remplirUserBoxRespoGroupe(){
        userBox.removeAllItems();
        userBox.addItem("-------------------------------------------------------");

        int idGroup = Application.getInstance().getGroupe(titreGroupe).getIdGroupe();
        Map<Integer,Utilisateur> arrayUsersOfGroup = ApplicationHelper.UsersOfGroup(idGroup);

        for(Iterator<Utilisateur> user = arrayUsersOfGroup.values().iterator(); user.hasNext();){

        	Utilisateur u = user.next();
        	
            int role = ApplicationHelper.IdRoleOfUserInGroup(u.getIdPersonne(), idGroup);
            
            System.out.println("role assoscié : "+role);

            if((role != Role.IDRESPONSABLE) && (role != Role.IDADMINISTRATEUR))
                userBox.addItem(u.getLogin());
        }

    }

//------------------------------------------Fin remplirUserBoxRespoGroupe-----------------------------------------------//

    
    
//-------------------------------------------remplirUserPendingBox--------------------------------------------------//

    public final void remplirUserPendingBox(){
        userPendingBox.removeAllItems();
        userPendingBox.addItem("-------------------------------------------------------");

        for(Utilisateur user : Application.getInstance().getArrayUserPending().values()){
            for(int i=0; i<user.getVectGroupe().size(); i++){
                System.out.println("user i : "+user.getGroupe(i).getNomGroupe());
                System.out.println("titreGroupe : "+titreGroupe);
                if(user.getGroupe(i).getNomGroupe().equals(titreGroupe))
                    userPendingBox.addItem(user.getLogin());
            }
        }
    }

//------------------------------------------Fin remplirPendingBox-----------------------------------------------//

    public JComboBox getUserBox() {
        return userBox;
    }

    public void setUserBox(JComboBox userBox) {
        this.userBox = userBox;
    }

    public JComboBox getUserPendingBox() {
        return userPendingBox;
    }

    public void setUserPendingBox(JComboBox userPendingBox) {
        this.userPendingBox = userPendingBox;
    }

    public void actionPerformed(ActionEvent e) {
        Command c = (Command)e.getSource();
        c.execute();
    }
}
