package view;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;

import javax.swing.*;

import authentification.Authentification;
import authentification.User;
import server.ServerTopicsManager;

@SuppressWarnings("serial")
public class viewServer extends JDialog implements ActionListener{
	
	private JTextField portField; 
	private JButton serverConnect; 
	private JButton serverDisconnect;
	
	private JTextArea login = new JTextArea();
	private JButton addlogin = new JButton("add login");
	private JTextField mdp = new JTextField();
	private JTextField newlogin = new JTextField();
	
	
	private ServerTopicsManager server = new ServerTopicsManager();
	Authentification allLogin = new Authentification();
	
	
	
	public void initGraphics() {
		
		serverDisconnect = new JButton("Deconnexion");
		serverConnect = new JButton("Connexion");
		portField = new JTextField("2300");
		setSize(400,900);
		
		serverDisconnect = new JButton("Deconnexion");
		serverConnect = new JButton("Connexion");
		portField = new JTextField("2300");
		setLayout(new BorderLayout());
		
		JPanel buttonsPanel = new JPanel(new GridLayout(2,2));
		buttonsPanel.setBorder(BorderFactory.createLineBorder(Color.black));

		JLabel label = new JLabel("  Port");
		buttonsPanel.add(label);
		buttonsPanel.add(portField);
		buttonsPanel.add(serverConnect);
		buttonsPanel.add(serverDisconnect);
		
		
		
		JPanel PLogin = new JPanel(new GridLayout(1,5));
		PLogin.setBorder(BorderFactory.createLineBorder(Color.black));
		PLogin.add(new JLabel("  Login :"));
		PLogin.add(newlogin);
		PLogin.add(new JLabel("  Password : "));
		PLogin.add(mdp);
		PLogin.add(addlogin);
		
		JPanel mainPanel = new JPanel(new GridLayout(1,1));
		mainPanel.add(login);
		login.setEditable(false);
		getContentPane().add(PLogin, BorderLayout.NORTH);
		getContentPane().add(mainPanel, BorderLayout.CENTER);
		getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
		this.refresh();
		setVisible(true);
	}
	
	public void initListeners()
	{
		serverConnect.addActionListener(this);
		serverDisconnect.addActionListener(this);
		addlogin.addActionListener(this);
		
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == serverConnect) {
			try{
			this.connect();
			}
			catch(Exception f){System.out.println(f);
			} 
		}
		else if (e.getSource() == serverDisconnect) {
			try{
			this.disconnect();
			}
			catch(Exception f){System.out.println(f);
			} 
		}
		else if(e.getSource() == addlogin)
		{
			try
			{
				System.out.println(newlogin.getText());
				allLogin.addUser(newlogin.getText(),mdp.getText());
				this.refresh();
				try
				{
					allLogin.save("users.txt");
				}
				catch(Exception g)
				{
					System.out.println(g);
				}
			}
			catch(Exception f)
			{
				System.out.println(f);
			}
		}
	}
	public void connect()throws IOException
	{
		server.startServer(2300);//Integer.valueOf(portField.getText()));
	}
	
	public void disconnect()throws IOException
	{
		server.stopServer();
	}
	
	public void refresh()
	{
		//allLogin.showHash();
		login.setText("");
		Hashtable<String,User> log = allLogin.getHashTable();
		Enumeration<String> e = log.keys();
		while(e.hasMoreElements()){
			String i = e.nextElement();
			
			login.setText(login.getText()+"Name :"+i+"\nPassword :"+log.get(i).getPassword()+"\n\n");
			System.out.println(i);
			System.out.println(log.get(i).getPassword());
			
		}
	}
	
	

}
