import javax.swing.*;

import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.util.*;
import java.io.*;

public class Starter extends JFrame implements ActionListener {
	private JButton ok, quit;
	private JComboBox interfacePicker, variantPicker;
	private JTextField multicastAddressBox, multicastPortBox;
	
	public Starter(String s) throws SocketException{
		super(s);
		
		Container cp = this.getContentPane();
		
		Enumeration n = NetworkInterface.getNetworkInterfaces();
		cp.setLayout(new BoxLayout(cp, BoxLayout.Y_AXIS));
		
		JPanel interfacePanel = new JPanel();
			interfacePanel.setLayout(new FlowLayout());
			
			JLabel interfacePickerLabel = new JLabel("Select NIC:");
				interfacePickerLabel.setHorizontalAlignment(SwingConstants.RIGHT);
				interfacePanel.add(interfacePickerLabel);
		
			interfacePicker = new JComboBox();
				while(n.hasMoreElements()){
					interfacePicker.addItem(((NetworkInterface)n.nextElement()).getDisplayName());
				}
				interfacePanel.add(interfacePicker);
				
			this.getContentPane().add(interfacePanel);
		
		JPanel multicastPanel = new JPanel();
			multicastPanel.setLayout(new FlowLayout());
			
			JLabel multicastAddressBoxLabel = new JLabel("Enter a multicast group address:");
				multicastPanel.add(multicastAddressBoxLabel);
			multicastAddressBox = new JTextField("239.0.0.1", 15);
				multicastPanel.add(multicastAddressBox);
				
			JLabel multicastPortBoxLabel = new JLabel("Enter a multicast port:");
				multicastPanel.add(multicastPortBoxLabel);
			multicastPortBox = new JTextField("4446", 5);
				multicastPanel.add(multicastPortBox);
				
		cp.add(multicastPanel);
			
		JPanel variantPanel = new JPanel();
			variantPanel.setLayout(new FlowLayout());
			
			JLabel variantPickerLabel = new JLabel("Choose a Game:");
				variantPanel.add(variantPickerLabel);
			
			variantPicker = new JComboBox();
				variantPicker.addItem("Followers");
				variantPicker.addItem("Tester");
				variantPanel.add(variantPicker);
			
		cp.add(variantPanel);
		
		JPanel buttonPanel = new JPanel();
			buttonPanel.setLayout(new FlowLayout()); 
		
			this.quit = new JButton("QUIT!");
				quit.addActionListener(this);
				buttonPanel.add(quit);
		
			this.ok = new JButton("\"=^_^=Play! =^_^=\"");
				ok.addActionListener(this);
				buttonPanel.add(ok);
			
		cp.add(buttonPanel);
		
		JRootPane rootPane = this.getRootPane();
		rootPane.setDefaultButton(ok);
		this.pack();
		
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int screenHeight = screenSize.height;
		int screenWidth = screenSize.width;
		setLocation((screenWidth / 2) - this.getWidth() / 2, (screenHeight / 2)- this.getHeight() / 2);

	}
	
	public void actionPerformed(ActionEvent e){
		if (e.getSource() == this.quit){
			System.exit(0);
		} else if (e.getSource() == this.ok){
			String nic = (String)interfacePicker.getSelectedItem();
			String address = multicastAddressBox.getText();
			int port = Integer.parseInt(multicastPortBox.getText());
			String var = (String)variantPicker.getSelectedItem();
			this.setVisible(false);
			dispose();
			if(var == "Followers"){
				BaseGame g = new Followers(nic, port, address);
				g.start();
			} else if (var == "Tester"){
				BaseGame g = new Tester(nic, port, address);
				g.start();
			}
		}
	}
	
	public static void main(String[] args){
		try{
			Starter window = new Starter("Followers Starter");
			window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			window.setVisible(true);
		} catch (SocketException e) {
			System.out.println("There was a SocketException error. Please place your arms behind your head and brace for impact.");
		}
		
	}
	
}