package client.view.admin;

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

import client.view.admin.gestionGroup.PanelCreerGroupe;
import javax.swing.JPanel;
import java.awt.*;
import client.view.admin.gestionGroup.PanelGestionGroupe;
import client.view.admin.gestionGroup.PanelModifierGroupe;
import client.view.admin.gestionUser.PanelAssignerUser;
import client.view.admin.gestionUser.PanelCreerUser;
import client.view.admin.gestionUser.PanelExclureUser;
import client.view.admin.gestionUser.PanelGestionUser;
import client.view.admin.gestionUser.PanelModifierUser;
import client.view.role.PanelCreerRole;

//-----------------------------------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 l'ensemble des onglets de la fenêtre principale.
 *
 * @author Dream Team - ING2
 */
public class PanelAdmin extends JPanel {

    //Declaration des variables
    private static PanelAdmin panSingleton = null;
    private PanelGestionUser panUser;
    private PanelGestionGroupe panGroup;
    private PanelCreerRole pcr;
    private PanelCreerGroupe pcg;
    private PanelCreerUser pcu;
    private PanelAssignerUser pau;
    private PanelExclureUser peu;
    private PanelModifierUser pmu;
    private PanelModifierGroupe pmg;

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de créer un singleton du panel admin
     * 
     * @return une unique instance du panel admin
     * 
     */
    public static PanelAdmin getInstance(){
        if(panSingleton == null){
            panSingleton = new PanelAdmin();
        }
        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 PanelAdmin() {

        this.setLayout(null);

        //Panel Gestion des utilisateurs
        panUser = PanelGestionUser.getInstance();
        panUser.setLayout(null);
        panUser.setBounds(0, 0, 445, 120);
        panUser.setVisible(true);

        //Panel Créer des rôles
        pcr = PanelCreerRole.getInstance();
        pcr.setLayout(null);
        pcr.setBounds(0, 120, 445, 415);
        pcr.setVisible(false);

        //Panel Assigner un rôle
        pau = PanelAssignerUser.getInstance();
        pau.setLayout(null);
        pau.setBounds(0, 120, 445, 415);
        pau.setVisible(false);

        //Panel Exclure des utilisateurs
        peu = PanelExclureUser.getInstance();
        peu.setLayout(null);
        peu.setBounds(0, 120, 445, 415);
        peu.setVisible(false);

        //Panel Créer des utilisateurs
        pcu = PanelCreerUser.getInstance();
        pcu.setLayout(null);
        pcu.setBounds(0, 120, 445, 415);
        pcu.setVisible(false);

        //Panel Modifier des utilisateurs
        pmu = PanelModifierUser.getInstance();
        pmu.setLayout(null);
        pmu.setBounds(0, 120, 445, 415);
        pmu.setVisible(false);

        //Panel Gestion des groupes
        panGroup = PanelGestionGroupe.getInstance();
        panGroup.setLayout(null);
        panGroup.setBounds(450, 0, 445, 545);
        panGroup.setVisible(true);

        //Panel Créer des groupes
        pcg = PanelCreerGroupe.getInstance();
        pcg.setLayout(null);
        pcg.setBounds(450, 0, 445, 545);
        pcg.setVisible(false);

        //Panel Modifier des groupes
        pmg = PanelModifierGroupe.getInstance();
        pmg.setLayout(null);
        pmg.setBounds(450, 0, 445, 545);
        pmg.setVisible(false);

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

        //Ajouter les panels
        this.add(panUser);
        this.add(pcr);
        this.add(pau);
        this.add(pcu);
        this.add(peu);
        this.add(pmu);
        this.add(panGroup);
        this.add(pcg);
        this.add(pmg);

    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel des groupes
     * 
     * @return le panel des groupes
     * 
     */
    public PanelGestionGroupe getPanGroup() {
        return panGroup;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel des utilisateurs
     * 
     * @return le panel des utilisateurs
     * 
     */
    public PanelGestionUser getPanUser() {
        return panUser;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel pour assigner des utilisateurs
     * 
     * @return le panel pour assigner des utilisateurs
     * 
     */
    public PanelAssignerUser getPau() {
        return pau;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel de création de groupe
     * 
     * @return le panel de création de groupe
     * 
     */
    public PanelCreerGroupe getPcg() {
        return pcg;
    }
    
    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel de création de rôle
     * 
     * @return le panel de création de rôle
     * 
     */
    public PanelCreerRole getPcr() {
        return pcr;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel de création d'utilisateur
     * 
     * @return le panel de création d'utilisateur
     * 
     */
    public PanelCreerUser getPcu() {
        return pcu;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel d'exclusion d'utilisateur
     * 
     * @return le panel d'exclusion d'utilisateur
     * 
     */
    public PanelExclureUser getPeu() {
        return peu;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel de modification de groupe
     * 
     * @return le panel de modification de groupe
     * 
     */
    public PanelModifierGroupe getPmg() {
        return pmg;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le panel de modification d'utilisateur
     * 
     * @return le panel de modification d'utilisateur
     * 
     */
    public PanelModifierUser getPmu() {
        return pmu;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le singleton du panel admin
     * 
     * @return le singleton du panel admin
     * 
     */
    public static PanelAdmin 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 du panel admin
     * 
     * @param panSingleton une nouvelle référence de singleton du panel admin
     * 
     */
    public static void setPanSingleton(PanelAdmin panSingleton) {
        PanelAdmin.panSingleton = panSingleton;
    }

}

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