import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

/**
 * Główne okno programu
 * 
 *
 */

public final class MainWindow extends JFrame{
	/**Pasek menu*/
	public JMenuBar menuBar;
	JMenu gra, pomoc, nowa;
	JMenuItem menuItem;
	JPanel all;
	JButton button;
	JLabel wynik;
	/**Pole gry*/
	public Table table;
	MenuListener listener;
	/**Regulacja prędkości*/
	public SpeedDialog speed;
	/**Najlepsze wyniki*/
	public ScoreDialog score;
	
	/**
	 * Kostrukcja wszystkich elementów składowych
	 */
	public MainWindow() {
		//Menu górne
		super("Polski hydraulik");
		menuBar = new JMenuBar();
		listener = new MenuListener();
				
		gra = new JMenu("Gra");
		menuBar.add(gra);
		menuBar.addMouseListener(new MouseAdapter(){
			public void mousePressed(MouseEvent m){
				Main.water.pause();
			}
		});
		
		nowa = new JMenu("Nowa");
		gra.add(nowa);
		
		menuItem = new JMenuItem("Pusta");
		menuItem.addActionListener(listener);
		nowa.add(menuItem);
		
		menuItem = new JMenuItem("Pełna");
		menuItem.addActionListener(listener);
		nowa.add(menuItem);
		
		menuItem = new JMenuItem("Restart");
		menuItem.addActionListener(listener);
		gra.add(menuItem);
		
		gra.addSeparator();
		menuItem = new JMenuItem("Poziom");
		menuItem.addActionListener(listener);
		gra.add(menuItem);
		
		menuItem = new JMenuItem("Najlepsze wyniki");
		menuItem.addActionListener(listener);
		gra.add(menuItem);
		
		gra.addSeparator();
		menuItem = new JMenuItem("Koniec");
		menuItem.addActionListener(listener);
		gra.add(menuItem);
		
		pomoc = new JMenu("Pomoc");
		menuBar.add(pomoc);
		
		menuItem = new JMenuItem("Instrukcje");
		menuItem.addActionListener(listener);
		pomoc.add(menuItem);
		
		pomoc.addSeparator();
		menuItem = new JMenuItem("Credits...");
		menuItem.addActionListener(listener);
		pomoc.add(menuItem);
		//~Menu Górne
		
		//Układ okna
		all = new JPanel(new BorderLayout());
						
		//Menu dolne
		JPanel bottom = new JPanel(new GridLayout());
		bottom.setBorder(BorderFactory.createLineBorder(Color.black));
		
		//Stół gry
		table = new Table();
		
		table.points = 0;
		wynik = new JLabel("Wynik: " + table.points, JLabel.CENTER);
		bottom.add(wynik);
		
		button = new JButton("Pauza");
		button.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent e){
						synchronized(Main.water){
							if(Main.water.suspended){
								Main.water.go();
							}
							else
								Main.water.pause();
							if(Main.water.finished){
								listener.newgame();
							}
						}
					}
				});
		bottom.add(button);
		
		all.add(BorderLayout.SOUTH, bottom);
		//~Menu dolne
		all.add(table);
					
		setJMenuBar(menuBar);
		add(all);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);
		setSize(800, 635);
		setVisible(true);
		
		//Regulacja prędkości
		speed = new SpeedDialog();
		speed.setBounds(250, 200, 300, 200);
		speed.setVisible(false);
		
		//Najlepsze wyniki
		try{
			ObjectInputStream in = new ObjectInputStream(new FileInputStream("scores.dat"));
			score = (ScoreDialog)in.readObject();
		}catch(Exception e){
			score = new ScoreDialog();
		}
		
		score.setBounds(250, 200, 300, 200);
		score.setVisible(false);
	}

}
