package client.view.role;

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

import client.control.Command;
import client.control.admin.EcouteurCreerRole;
import client.view.role.button.ButtonAnnulerNouvRoleUser;
import client.view.role.button.ButtonValiderNouvRoleUser;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

//-----------------------------------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 créer un panel pour la création d'un rôle.
 *
 * @author Dream Team - ING2
 */
public class PanelCreerRole extends JPanel implements ActionListener {

    //Déclaration des variables.
    private static PanelCreerRole panSingleton = null;
    protected TitledBorder titleInfo;
    protected JLabel titreNomRole,titreAction;
    protected JTextField nomRole;
    protected JCheckBox creerPb,consulterPb,modifierPb,supprimerPb,creerGroup,modifierGroup,supprimerGroup,
            quitterGroup,rejoindreGroup,assignerRole,creerMembre,exclureMemberGroup,exclureMember,
            supprimerMember,accepterMemberGroup,accepterMember,modifierMembre,refuserMember,refuserMemberGroup;

    /**<u><i>Explication de la méthode :</i></u>
     * <P>Cette méthode permet de créer une unique instance du panel pour créer des rôles
     * 
     * @return le singleton du panel pour créer des rôles
     * 
     */
    public static PanelCreerRole getInstance(){
        if(panSingleton == null){
            panSingleton = new PanelCreerRole();
        }
        return panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P>Constructeur permettant de créer le panel contenant la création de rôle.
     * 
     */
    private PanelCreerRole(){
        
        //Titre du Panel
        titleInfo = new TitledBorder("Nouveau rôle...");
        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));

        //Nom du rôle
        titreNomRole = new JLabel("Nom du rôle :");
        titreNomRole.setBounds(50, 50, 135, 15);
        add(titreNomRole);

        nomRole = new JTextField(25);
        nomRole.setBounds(50, 70, 250, 20);
        add(nomRole);

        //Type d'actions possibles
        titreAction = new JLabel("Actions :");
        titreAction.setBounds(50, 100, 135, 20);
        add(titreAction);

        //Créer un problème
        creerPb = new JCheckBox("Créer un problème");
        creerPb.setBounds(50, 130, 170, 20);
        creerPb.setBackground(new Color(234, 232, 233));
        add(creerPb);

        //Consulter un problème
        consulterPb = new JCheckBox("Consulter un problème");
        consulterPb.setBounds(50, 150, 170, 20);
        consulterPb.setBackground(new Color(234, 232, 233));
        add(consulterPb);

        //Modifier un problème
        modifierPb = new JCheckBox("Modifier un problème");
        modifierPb.setBounds(50, 170, 170, 20);
        modifierPb.setBackground(new Color(234, 232, 233));
        add(modifierPb);

        //Supprimer un problème
        supprimerPb = new JCheckBox("Supprimer un problème");
        supprimerPb.setBounds(50, 190, 170, 20);
        supprimerPb.setBackground(new Color(234, 232, 233));
        add(supprimerPb);

        //Créer un groupe
        creerGroup = new JCheckBox("Créer un groupe");
        creerGroup.setBounds(50, 210, 150, 20);
        creerGroup.setBackground(new Color(234, 232, 233));
        add(creerGroup);

        //Rejoindre un groupe
        rejoindreGroup = new JCheckBox("Rejoindre un groupe");
        rejoindreGroup.setBounds(50, 230, 150, 20);
        rejoindreGroup.setBackground(new Color(234, 232, 233));
        add(rejoindreGroup);

        //Quitter un groupe
        quitterGroup = new JCheckBox("Quitter un groupe");
        quitterGroup.setBounds(50, 250, 150, 20);
        quitterGroup.setBackground(new Color(234, 232, 233));
        add(quitterGroup);

        //Modifier un groupe
        modifierGroup = new JCheckBox("Modifier un groupe");
        modifierGroup.setBounds(50, 270, 150, 20);
        modifierGroup.setBackground(new Color(234, 232, 233));
        add(modifierGroup);

        //Supprimer un groupe
        supprimerGroup = new JCheckBox("Supprimer un groupe");
        supprimerGroup.setBounds(250, 130, 150, 20);
        supprimerGroup.setBackground(new Color(234, 232, 233));
        add(supprimerGroup);

        //Assigner un responsable
        assignerRole = new JCheckBox("Assigner un Rôle");
        assignerRole.setBounds(250, 150, 170, 20);
        assignerRole.setBackground(new Color(234, 232, 233));
        add(assignerRole);

        //Créer un membre
        creerMembre = new JCheckBox("Créer un membre");
        creerMembre.setBounds(250, 170, 150, 20);
        creerMembre.setBackground(new Color(234, 232, 233));
        add(creerMembre);

        //Exclure un membre
        exclureMember = new JCheckBox("Exclure un membre");
        exclureMember.setBounds(250, 190, 150, 20);
        exclureMember.setBackground(new Color(234, 232, 233));
        add(exclureMember);

        //Supprimer un membre
        supprimerMember = new JCheckBox("Supprimer un membre");
        supprimerMember.setBounds(250, 210, 170, 20);
        supprimerMember.setBackground(new Color(234, 232, 233));
        add(supprimerMember);

        //Accepter un membre
        accepterMember = new JCheckBox("Accepter un membre");
        accepterMember.setBounds(250, 230, 150, 20);
        accepterMember.setBackground(new Color(234, 232, 233));
        add(accepterMember);

        //Accepter un membre
        accepterMemberGroup = new JCheckBox("Accepter un membre d'un groupe");
        accepterMemberGroup.setBounds(250, 230, 150, 20);
        accepterMemberGroup.setBackground(new Color(234, 232, 233));
        //add(accepterMemberGroup);

        //TODO les mettres en place
        //Refuser un membre
        refuserMember = new JCheckBox("Refuser un membre");
        refuserMember.setBounds(250, 230, 150, 20);
        refuserMember.setBackground(new Color(234, 232, 233));
        //add(refuserMember);

        //Refuser un membre
        //TODO les mettres en place
        refuserMemberGroup = new JCheckBox("Refuser un membre d'un groupe");
        refuserMemberGroup.setBounds(250, 230, 150, 20);
        refuserMemberGroup.setBackground(new Color(234, 232, 233));
        //add(refuserMemberGroup);

        //Modifier un membre
        modifierMembre = new JCheckBox("Modifier un membre");
        modifierMembre.setBounds(250, 250, 150, 20);
        modifierMembre.setBackground(new Color(234, 232, 233));
        add(modifierMembre);

        //Exclure un membre
        exclureMemberGroup = new JCheckBox("Exclure un membre d'un groupe");
        exclureMemberGroup.setBounds(250, 270, 150, 20);
        exclureMemberGroup.setBackground(new Color(234, 232, 233));
        add(exclureMemberGroup);

        EcouteurCreerRole creerRoleListener = new EcouteurCreerRole();

        //Bouton annuler
        ButtonAnnulerNouvRoleUser banru = new ButtonAnnulerNouvRoleUser(this);
        add(banru);

        //Bouton valider
        ButtonValiderNouvRoleUser bvnru = new ButtonValiderNouvRoleUser(this);
        bvnru.setActionCommand(EcouteurCreerRole.VALIDER);
        bvnru.addActionListener(creerRoleListener);
        add(bvnru);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour accepter un membre
     * 
     * @return la checkBox pour accepter un membre
     * 
     */
    public JCheckBox getAccepterMember() {
        return accepterMember;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour refuser un membre
     * 
     * @return la checkBox pour accepter un membre
     * 
     */
    public JCheckBox getRefuserMember() {
        return refuserMember;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour refuser un membre du groupe
     * 
     * @return la checkBox pour refuser un membre
     * 
     */
    public JCheckBox getRefuserMemberGroup() {
        return refuserMemberGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour assigner un rôle à un membre
     * 
     * @return la checkBox pour assigner un rôle à un membre
     * 
     */
    public JCheckBox getAssignerRole() {
        return assignerRole;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour consulter un problème
     * 
     * @return la checkBox pour consulter un problème
     * 
     */
    public JCheckBox getConsulterPb() {
        return consulterPb;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour créer un groupe
     * 
     * @return la checkBox pour créer un groupe
     * 
     */
    public JCheckBox getCreerGroup() {
        return creerGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour créer un problème
     * 
     * @return la checkBox pour créer un problème
     * 
     */
    public JCheckBox getCreerPb() {
        return creerPb;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour créer un membre
     * 
     * @return la checkBox pour créer un membre
     * 
     */
    public JCheckBox getCreerMembre() {
        return creerMembre;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour accepter un membre dans un groupe
     * 
     * @return la checkBox pour accepter un membre dans un groupe
     * 
     */
    public JCheckBox getAccepterMemberGroup() {
        return accepterMemberGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour exclure un membre dans un groupe
     * 
     * @return la checkBox pour exclure un membre dans un groupe
     * 
     */
    public JCheckBox getExclureMemberGroup() {
        return exclureMemberGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour exclure un membre
     * 
     * @return la checkBox pour exclure un membre
     * 
     */
    public JCheckBox getExclureMember() {
        return exclureMember;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour modifier un groupe
     * 
     * @return la checkBox pour modifier un groupe
     * 
     */
    public JCheckBox getModifierGroup() {
        return modifierGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour modifier un membre
     * 
     * @return la checkBox pour modifier un membre
     * 
     */
    public JCheckBox getModifierMembre() {
        return modifierMembre;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour modifier un problème
     * 
     * @return la checkBox pour modifier un problème
     * 
     */
    public JCheckBox getModifierPb() {
        return modifierPb;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour quitter un groupe
     * 
     * @return la checkBox pour quitter un groupe
     * 
     */
    public JCheckBox getQuitterGroup() {
        return quitterGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour supprimer un groupe
     * 
     * @return la checkBox pour supprimer un groupe
     * 
     */
    public JCheckBox getSupprimerGroup() {
        return supprimerGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour supprimer un membre
     * 
     * @return la checkBox pour supprimer un membre
     * 
     */
    public JCheckBox getSupprimerMember() {
        return supprimerMember;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour supprimer un problème
     * 
     * @return la checkBox pour supprimer un problème
     * 
     */
    public JCheckBox getSupprimerPb() {
        return supprimerPb;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la checkBox pour rejoindre un groupe
     * 
     * @return la checkBox pour rejoindre un groupe
     * 
     */
    public JCheckBox getRejoindreGroup() {
        return rejoindreGroup;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le nom du rôle
     * 
     * @return le nom du rôle
     * 
     */
    public JTextField getNomRole() {
        return nomRole;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de gérer les évènements liés à la souris
	 * 
	 * @param e Evènements de la souris
	 * 
	 */
    public void actionPerformed(ActionEvent e) {
        Command c = (Command)e.getSource();
        c.execute();
    }

}

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