package swingUI;

import game.TicTacToeFrame;

import java.awt.Container;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 * @author martin
 * the jframe window
 */
public class TicTacToeMain extends JFrame{
	/**
	 * window constructor
	 */
	public TicTacToeMain(){
		super("TicTacToe");
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		setVisible(true);
		setSize(300, 300);

		/*JFrame navigator
		 * a functor that will switch pane on root window
		 * it will be given to every panel*/
		final TicTacToeNav nav = new TicTacToeNav(){
			//preinited panel
			private Container _about = new TicTacToeAbout(this),
					          _quit = new TicTacToeQuit(this),
					          _title = new TicTacToeTitle(this);

			/* (non-Javadoc)
			 * @see lab10.TicTacToeNav#twoPlayer()
			 */
			public void game(final TicTacToeGame game) {
				TicTacToeMenu tmp = new TicTacToeMenu(this,game);
				setContentPane(tmp);
				tmp.requestFocus();
				revalidate();
			}
			/* (non-Javadoc)
			 * @see lab10.TicTacToeNav#stat()
			 */
			public void stat() {
				Container _score = new TicTacToeMenu(this,new TicTacToeStat(this));
				setContentPane(_score);
				_score.requestFocus();
				revalidate();
			}
			/* (non-Javadoc)
			 * @see lab10.TicTacToeNav#about()
			 */
			public void about() {
				setContentPane(_about);
				_about.requestFocus();
				revalidate();
			}
			/* (non-Javadoc)
			 * @see lab10.TicTacToeNav#title()
			 */
			public void title() {
				setContentPane(_title);
				_title.requestFocus();
				revalidate();
			}
			/* (non-Javadoc)
			 * @see lab10.TicTacToeNav#quit()
			 */
			public void quit() {
				setContentPane(_quit);
				_quit.requestFocus();
				revalidate();
			}
			/* (non-Javadoc)
			 * @see lab10.TicTacToeNav#win()
			 */
			public void win() {
				Container _end = new TicTacToeEnd(this);
				setContentPane(_end);
				_quit.requestFocus();
				revalidate();
			}
			/* (non-Javadoc)
			 * @see lab10.TicTacToeNav#exit()
			 */
			public void exit(){
				setVisible(false);
				dispose();
			};
		};

		//just to make sure X button will goto proper confirmation panel
		addWindowListener(new WindowListener(){
			public void windowActivated(WindowEvent arg0) {}
			public void windowClosed(WindowEvent arg0) {}
			public void windowClosing(WindowEvent arg0) {
				nav.quit();
			}
			public void windowDeactivated(WindowEvent arg0) {}
			public void windowDeiconified(WindowEvent arg0) {}
			public void windowIconified(WindowEvent arg0) {}
			public void windowOpened(WindowEvent arg0) {}
		});

		//load first panel
		nav.title();
	}

	/**
	 * @param args
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 * @throws ClassNotFoundException 
	 * @throws UnsupportedLookAndFeelException 
	 */
	public static void main(String [] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{
	    //UIManager.setLookAndFeel("net.sourceforge.napkinlaf.NapkinLookAndFeel");

		TicTacToeMain tmp = new TicTacToeMain();
	}
}
