import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 * 
 * @author Russell Glasser
 * 
 */
public class ActionFrame extends JFrame implements ItemListener,
		ActionListener, Runnable {
	private static final long serialVersionUID = 1L;
	private Map<String, Color> colorMap;
	private JTextArea txtUrl, txtContent;
	private JButton btnGo;
	private boolean pageLoading;

	/**
	 * Set up the frame
	 * 
	 * @param title
	 *            Title of the page
	 */
	public ActionFrame(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pageLoading = false;

		JPanel colorPanel, urlPanel;

		colorPanel = new JPanel();
		colorPanel.setOpaque(false);
		colorPanel.add(new JLabel("Set background color: "));
		JComboBox colorSelect = createColorSelect(getContentPane()
				.getBackground());
		colorPanel.add(colorSelect);
		add(colorPanel, BorderLayout.NORTH);

		urlPanel = new JPanel();
		urlPanel.setOpaque(false);
		urlPanel.add(new JLabel("Enter URL: "));
		txtUrl = new JTextArea(1, 30);
		txtUrl.setText("http://www.google.com");
		urlPanel.add(txtUrl);
		btnGo = new JButton("Go!");
		urlPanel.add(btnGo);
		btnGo.addActionListener(this);
		txtContent = new JTextArea(15, 40);
		JScrollPane scroll = new JScrollPane(txtContent);
		urlPanel.add(scroll);
		add(urlPanel, BorderLayout.CENTER);
	}

	public JComboBox createColorSelect(Color defaultColor) {
		colorMap = new HashMap<String, Color>();
		JComboBox colorSelect = new JComboBox();
		colorSelect.addItem("default");
		colorSelect.addItem("red");
		colorSelect.addItem("orange");
		colorSelect.addItem("yellow");
		colorSelect.addItem("green");
		colorSelect.addItem("blue");
		colorSelect.addItem("purple");
		colorSelect.addItem("black");
		colorSelect.addItemListener(this);

		colorMap.put("default", defaultColor);
		colorMap.put("red", Color.red);
		colorMap.put("orange", new Color(255, 150, 0));
		colorMap.put("yellow", Color.yellow);
		colorMap.put("green", new Color(0, 200, 0));
		colorMap.put("blue", Color.blue);
		colorMap.put("purple", new Color(180, 0, 200));
		colorMap.put("black", Color.black);

		return colorSelect;
	}

	@Override
	public void itemStateChanged(ItemEvent e) {
		String col = (String) e.getItem();
		if (e.getStateChange() == 1) {
			Color newColor = colorMap.get(col);
			getContentPane().setBackground(newColor);
			System.out.println("Set color to " + newColor + "!");
			repaint();
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String url = txtUrl.getText();
		if (!pageLoading) {
			txtContent.setText("Loading URL " + url + "...");
			pageLoading = true;
			new Thread(this).start();
		} else {
			txtContent.setText("Still loading URL "+url+" (be patient!)");
		}
	}

	@Override
	public void run() {
		String url = txtUrl.getText();
		txtContent.setText(Utils.getWebPage(url));
		pageLoading = false;
	}
}

