package client.view.admin.gestionUser;

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

import client.control.membre.EcouteurModifierMembre;
import client.model.user.Utilisateur;
import client.control.Command;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import client.view.admin.gestionUser.button.ButtonAnnulerModifierUser;
import client.view.admin.gestionUser.button.ButtonValiderModifierUser;
import java.awt.event.ActionListener;

//-----------------------------------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 modifier un utilisateur.
 *
 * @author Dream Team - ING2
 */
public class PanelModifierUser extends JPanel implements ActionListener {

    //Déclarations des variables.
    private static PanelModifierUser panSingleton = null;
    private TitledBorder titleInfo;
    private JTextField nom, prenom, adresse, ville, codePostal, telephone, email, login, password, reponse;
    private JLabel titreNom, titrePrenom, titreAdresse, titreVille, titreCP, titreTel, titreEmail, titreLogin, titrePassword;
    private Utilisateur userModifier;

    public static PanelModifierUser getInstance(){
        if(panSingleton == null){
            panSingleton = new PanelModifierUser();
        }
        return panSingleton;
    }

   /**<u><i>Explication de la méthode :</i></u>
    * <P>Constructeur permettant de modifier un utilisateur.
    */
    private PanelModifierUser() {

        //Titre
        titleInfo = new TitledBorder("Modifier Utilisateur");
        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));

        setLayout(null);

        //Nom
        titreNom = new JLabel("Nom : ");
        titreNom.setBounds(50, 30, 50, 20);
        add(titreNom);
        nom = new JTextField(25);
        nom.setBounds(130, 30, 100, 20);
        add(nom);

        //Prenom
        titrePrenom = new JLabel("Prénom : ");
        titrePrenom.setBounds(50, 50, 60, 20);
        add(titrePrenom);
        prenom = new JTextField();
        prenom.setBounds(130, 50, 100, 20);
        add(prenom);

        //Adresse
        titreAdresse = new JLabel("Adresse : ");
        titreAdresse.setBounds(50, 70, 60, 20);
        add(titreAdresse);
        adresse = new JTextField();
        adresse.setBounds(130, 70, 100, 20);
        add(adresse);

        //Ville
        titreVille = new JLabel("Ville : ");
        titreVille.setBounds(50, 90, 60, 20);
        add(titreVille);
        ville = new JTextField();
        ville.setBounds(130, 90, 100, 20);
        add(ville);

        //Code Postal
        titreCP = new JLabel("Code Postal : ");
        titreCP.setBounds(50, 110, 80, 20);
        add(titreCP);
        codePostal = new JTextField();
        codePostal.setBounds(130, 110, 100, 20);
        add(codePostal);

        //Téléphone
        titreTel = new JLabel("Téléphone : ");
        titreTel.setBounds(50, 130, 80, 20);
        add(titreTel);
        telephone = new JTextField();
        telephone.setBounds(130, 130, 100, 20);
        add(telephone);

        //Email
        titreEmail = new JLabel("E mail : ");
        titreEmail.setBounds(50, 150, 60, 20);
        add(titreEmail);
        email = new JTextField();
        email.setBounds(130, 150, 100, 20);
        add(email);

        //Login
        titreLogin = new JLabel("Login : ");
        titreLogin.setBounds(50, 170, 60, 20);
        add(titreLogin);
        login = new JTextField();
        login.setBounds(130, 170, 100, 20);
        add(login);

        //Password
        titrePassword = new JLabel("Password : ");
        titrePassword.setBounds(50, 190, 80, 20);
        add(titrePassword);
        password = new JTextField();
        password.setBounds(130, 190, 100, 20);
        add(password);

        //Listener
        EcouteurModifierMembre modifierMembreListener = new EcouteurModifierMembre();

        //Valider
        ButtonValiderModifierUser bvmu = new ButtonValiderModifierUser(this);
        bvmu.setActionCommand(EcouteurModifierMembre.VALIDER);
        bvmu.addActionListener(modifierMembreListener);
        add(bvmu);

        //Annuler
        ButtonAnnulerModifierUser bamu = new  ButtonAnnulerModifierUser(this);
        add(bamu);
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField d'adresse
     * 
     * @return l'adresse de l'utilisateur
     * 
     */
    public JTextField getAdresse() {
        return adresse;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField d'adresse
     * 
     * @param adresse nouvelle valeur du JTextField d'adresse
     * 
     */
    public void setAdresse(JTextField adresse) {
        this.adresse = adresse;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField du code postal
     * 
     * @return le code postal de l'utilisateur
     * 
     */
    public JTextField getCodePostal() {
        return codePostal;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField code postal
     * 
     * @param codePostal nouvelle valeur du JTextField code postal
     * 
     */
    public void setCodePostal(JTextField codePostal) {
        this.codePostal = codePostal;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField d'email
     * 
     * @return email de l'utilisateur
     * 
     */
    public JTextField getEmail() {
        return email;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField d'email
     * 
     * @param email nouvelle valeur du JTextField d'email
     * 
     */
    public void setEmail(JTextField email) {
        this.email = email;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField login
     * 
     * @return login de l'utilisateur
     * 
     */
    public JTextField getLogin() {
        return login;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField login
     * 
     * @param login nouvelle valeur du JTextField login
     * 
     */
    public void setLogin(JTextField login) {
        this.login = login;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField nom
     * 
     * @return nom de l'utilisateur
     * 
     */
    public JTextField getNom() {
        return nom;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField nom
     * 
     * @param nom nouvelle valeur du JTextField nom
     * 
     */
    public void setNom(JTextField nom) {
        this.nom = nom;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField password
     * 
     * @return password de l'utilisateur
     * 
     */
    public JTextField getPassword() {
        return password;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField password
     * 
     * @param password nouvelle valeur du JTextField password
     * 
     */
    public void setPassword(JTextField password) {
        this.password = password;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField prénom
     * 
     * @return prénom de l'utilisateur
     * 
     */
    public JTextField getPrenom() {
        return prenom;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField prénom
     * 
     * @param prenom nouvelle valeur du JTextField d'adresse prénom
     * 
     */
    public void setPrenom(JTextField prenom) {
        this.prenom = prenom;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer la réponse 
     * 
     * @return réponse de l'utilisateur
     * 
     */
    public JTextField getReponse() {
        return reponse;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField réponse
     * 
     * @param reponse nouvelle valeur du JTextField réponse
     * 
     */
    public void setReponse(JTextField reponse) {
        this.reponse = reponse;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField téléphone
     * 
     * @return téléphone de l'utilisateur
     * 
     */
    public JTextField getTelephone() {
        return telephone;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField téléphone
     * 
     * @param telephone nouvelle valeur du JTextField téléhone
     * 
     */
    public void setTelephone(JTextField telephone) {
        this.telephone = telephone;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer le JTextField ville
     * 
     * @return ville de l'utilisateur
     * 
     */
    public JTextField getVille() {
        return ville;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle valeur du JTextField ville
     * 
     * @param ville nouvelle valeur du JTextField ville
     * 
     */
    public void setVille(JTextField ville) {
        this.ville = ville;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de récupérer l'utilisateur
     * 
     * @return l'utilisateur à modifier
     * 
     */
    public Utilisateur getUserModifier() {
        return userModifier;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet d'assigner une nouvelle référence de l'utilisateur modfifié
     * 
     * @param  userModifier nouvelle référence de l'utilisateur modfifié
     * 
     */
    public void setUserModifier(Utilisateur userModifier) {
        this.userModifier = userModifier;
    }

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

