package view;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.InetAddress;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import client.ClientTopicsManager;

@SuppressWarnings("serial")
public class ConfConnection extends JDialog implements ActionListener {
	private ClientTopicsManager ctm;
	private MainClient parent;
	private JButton connectButton = new JButton("connect");
	private JButton cancelButton = new JButton("cancel");
	private JTextField iNetAddressField = new JTextField("localhost");
	private JTextField portField = new JTextField("2300");
	private String precINetAddress;
	private String precPort;
	
	public ConfConnection(JFrame parent, String title, boolean modal, ClientTopicsManager ctm) {
		super(parent, title, modal);
		this.parent = (MainClient) parent;
		this.ctm = ctm;
		
		precINetAddress = iNetAddressField.getText();
		precPort = portField.getText();
		
		initGraphics();
		initListeners();
	}
	
	public void initGraphics() {
		setSize(300, 150);
		
		setLayout(new GridLayout(3,1,-1,10));

		JPanel buttonsPanel = new JPanel(new FlowLayout());
		buttonsPanel.add(connectButton);
		buttonsPanel.add(cancelButton);

		getContentPane().add(Util.getLabeledComponent(iNetAddressField, "address"));
		getContentPane().add(Util.getLabeledComponent(portField, "port"));
		getContentPane().add(buttonsPanel);
	}
	
	public void initListeners() {
		connectButton.addActionListener(this);
		cancelButton.addActionListener(this);
	}
	
	public void connectAction() {
		try {
			if (parent.isConnected()) {
				ctm.disconnect();
				parent.setConnected(false);
			}
			ctm.setServer(InetAddress.getByName(iNetAddressField.getText()), Integer.valueOf(portField.getText()));
			ctm.connect();
		} catch (IOException exc) {
			JOptionPane.showMessageDialog(this, "ERROR : connection impossible", "ERROR", JOptionPane.ERROR_MESSAGE);
		}
		parent.setConnected(true);
		setVisible(false);
		precINetAddress = iNetAddressField.getText();
		precPort = portField.getText();
	}
	
	public void cancelAction() {
		setVisible(false);
		iNetAddressField.setText(precINetAddress);
		portField.setText(precPort);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == connectButton) {
			connectAction();
		} else if (e.getSource() == cancelButton) {
			cancelAction();
		}
	}
}
