package client.view.connexion;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

import client.control.Command;
import client.control.connexion.EcouteurLoginInscriptionMouse;
import client.control.connexion.EcouteurLoginMouseMotion;
import client.control.connexion.EcouteurLoginValider;
import client.view.connexion.button.ButtonAnnulerConnexion;
import client.view.connexion.button.ButtonValiderConnexion;

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

    //Déclaration des variables.
    private TitledBorder titleInfo;
    private static PanelConnexion panSingleton = null;
    private JLabel titreProjet, login, mdpLost, inscription, password;
    private JTextField loginText;
    private JPasswordField passwordText;

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode permet de créer une unique instance du panel de la connexion
     * 
     * @return une unique instance du panel de la connexion
     * 
     */
    public static PanelConnexion getInstance(){
        if(panSingleton == null){
            panSingleton = new PanelConnexion();
        }
        return panSingleton;
    }

    /**<u><i>Explication de la méthode :</i></u>
     * <P> Cette méthode est le constructeur du panel connexion
     * 
     */
    private PanelConnexion(){
        
        //Panel pour se connecter
        setLayout(null);
        setBounds(0, 0, 900, 550);
        
        //Titre du panel
        titleInfo = new TitledBorder(" Connexion ");
        titleInfo.setTitleColor(Color.BLUE);
        setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.BLUE));
        setBorder(BorderFactory.createTitledBorder(titleInfo));

        //Police d'écriture
        Font police = new Font("Time New Roman", Font.PLAIN, 12);
        Font police1 = new Font("Time New Roman", Font.ITALIC, 13);
        Font titreMain = new Font("Tahoma", Font.ITALIC, 25);

        //Titre principal
        titreProjet = new JLabel("OPTIM'EISTI");
        titreProjet.setFont(titreMain);
        titreProjet.setForeground(Color.BLACK);
        titreProjet.setBounds(400, 150, 250, 30);
        add(titreProjet);

        //Login - Label
        login = new JLabel("Login : ");
        login.setBounds(305, 200, 50, 30);
        add(login);

        //Login - Champ de Saisie
        loginText = new JTextField();
        loginText.setFont(police);
        loginText.setForeground(Color.BLACK);
        loginText.setBounds(350, 200, 250, 30);
        add(loginText);

        //Password - Label
        password = new JLabel("Password : ");
        password.setBounds(280, 235, 100, 30);
        add(password);

        //Password - Champ de Saisie
        passwordText = new JPasswordField();
        passwordText.setFont(police);
        passwordText.setForeground(Color.BLACK);
        passwordText.setBounds(350, 235, 250, 30);
        add(passwordText);

        //OK
        ButtonValiderConnexion bvc = new ButtonValiderConnexion(this);
        bvc.addActionListener(new EcouteurLoginValider());
        add(bvc);

        //Annuler
        ButtonAnnulerConnexion bac = new ButtonAnnulerConnexion(this);
        add(bac);

        //inscription
        inscription = new JLabel("Inscription");
        inscription.setBounds(535, 265, 200, 20);
        inscription.setFont(police1);
        inscription.addMouseListener(new EcouteurLoginInscriptionMouse());
        inscription.addMouseMotionListener(new EcouteurLoginMouseMotion());
        add(inscription);
    }

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

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le password
	 * 
	 * @return le password
	 * 
	 */
    public JPasswordField getPasswordText() {
        return passwordText;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le label de l'inscription
	 * 
	 * @return l'inscription
	 * 
	 */
    public JLabel getInscription() {
        return inscription;
    }

    /**
	 * <u><i>Explication de la méthode :</i></u>
	 * <P>
	 * Cette méthode permet de récupérer le label du mot de passe
	 * 
	 * @return le mot de passe
	 * 
	 */
    public JLabel getMdpLost() {
        return mdpLost;
    }

    /**
	 * <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();
    }

}
