package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.JOptionPane;

import java.io.IOException;

import controller.*;

public class FenetreModifPseudo implements ActionListener {
	
	JFrame frame;
    JPanel panel;
    JTextField pseudofield;
    JLabel Text;
    JButton ok;
    JButton Cancel;
    Agent agent;
    
    /*
     * Constructeur d'une fenetre d'affichage pour la connexion d'un utilisateur.
     * Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo.
     */
    public FenetreModifPseudo(Agent agent) {
    	
    	this.agent = agent;
    	
		//creer une instance JFrame 
		frame = new JFrame("Modification pseudo");
		
        //sortir quand l’utilisateur ferme le frame
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// fixer les dimensions de la fenetre 
        frame.setSize(new Dimension(120, 40));
        
        //Creer le JPanel
        panel = new JPanel(new GridLayout(4,1));
        
        //Ajouter les elements 
        this.addWidgets();
        
        //Set the default button.
        frame.getRootPane().setDefaultButton(ok);
        
        //Ajouter le panel a la window
        frame.getContentPane().add(panel, BorderLayout.CENTER);
        
        //L'utilisateur ne pourra pas aggrandir la fenetre
        this.frame.setResizable(false);
        
        //Afficher la fenetre
        frame.pack();
        frame.setVisible(true);
	}
    
    private void addWidgets() {
    	
	 	// Créer Zone d'insertion de texte pour le pseudo
        this.pseudofield = new JTextField(2); 
        
        // creation d'un label qui contiendra un txt au centre
        this.Text = new JLabel("Type your new pseudo", SwingConstants.CENTER); 
        
        //Ajout d'un bouton Connexion 
        this.ok = new JButton("Continue");
        this.Cancel = new JButton("Cancel");
        this.ok.addActionListener(this);
        this.ok.setSelected(false);
        this.Cancel.addActionListener(this);
        
        //On associe au bouton Connexion des actions a realiser
        this.ok.addActionListener(this);
        
        // On ajoute les differents elements au panel
        panel.add(pseudofield);
        panel.add(Text);
        panel.add(ok);
        panel.add(Cancel);
        
        //ajouter un effet de bord transparent au composant Jlabel
        Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
 }
    
    public void actionPerformed(ActionEvent event) {
    	Object source = event.getSource();
    	if(source == ok){
    		
    		//Récupération du nouveau pseudo
    		String newPseudo = pseudofield.getText();
			try {
				
				//Si le nouveau pseudo est acceptable 
				if(agent.changerPseudo(newPseudo)) {
						//Affichage message 
						JOptionPane.showMessageDialog(frame, "Your new pseudo is "+newPseudo);
						frame.dispose();
						new FenetreMenu(agent);
				//Sinon affichage message erreur
				}else {
					if(!ok.isSelected() && !FenetreMenu.ouvert) {
						try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						JOptionPane.showMessageDialog(frame, "Pseudo already use, choose another one");
						ok.setSelected(true);
						frame.dispose();
						new FenetreModifPseudo(agent);
					}
				}
				
			} catch (HeadlessException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			};
			
    	}else if(source == Cancel) {
				frame.dispose();
        		try {
					new FenetreMenu(agent);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
    	}
}
