import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

/**
 * Odbiornik zdarzeń związanych z menu głównym programu
 * 
 * 
 */
public final class MenuListener implements ActionListener {
	/**
	 * Rodzaj gry
	 * true - Tablepane pełny Hexów
	 * false - Tablepane pusty
	 */
	public boolean kind;
	
	
	/**Funkcja przechwytywania zdarzeń
	 */
	public void actionPerformed(ActionEvent e) {
		JMenuItem source = (JMenuItem)e.getSource();
		String name = source.getText();
				
		if(name.equals("Pusta")){
			kind = false;
			newgame();
		}
		
		if(name.equals("Pełna")){
			kind = true;
			newgame();
		}
		
		if(name.equals("Restart")){
			newgame();
		}
		
		if(name.equals("Poziom"))
			Main.window.speed.setVisible(true);
		
		if(name.equals("Koniec"))
			System.exit(0);
		
		if(name.equals("Najlepsze wyniki"))
			Main.window.score.setVisible(true);
		
		if(name.equals("Instrukcje"))
			JOptionPane.showMessageDialog(Main.window, "<html><center>Zdobywaj punkty, utrzymując wodę jak najdłużej w rurach, poprzez<br>przenoszenie i obracanie elementów na stole gry.</html>", "Instrukcje", JOptionPane.INFORMATION_MESSAGE);
		
		if(name.equals("Credits..."))
			JOptionPane.showMessageDialog(Main.window, "<html><b>Projekt i implementacja</b><br>Stanisław Swianiewicz, 2008</html>", "Credits...", JOptionPane.INFORMATION_MESSAGE);
	}
	
	/**Powoduje restart gry zachowując ustawienia {@link MenuListener#kind}
	 */
	
	public void newgame(){
		Main.water.finish();
		try{
			Main.water.join();
		}catch(Exception ex){}
		
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					Main.window.all.remove(Main.window.table);
					Main.window.table = new Table();
					Main.window.all.add(Main.window.table);
					Main.window.validate();
					Main.window.wynik.setText("Wynik: " + Main.window.table.points);
					Main.window.wynik.repaint();
				}
			});
		
		if(kind){
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					for(int i=0; i<Main.window.table.tablepane.w; i++){
						for(int j=0; j<Main.window.table.tablepane.h; j++){
							if((i==6 && j==11) || (i==7 && j==10))
								continue;
							Main.window.table.tablepane.addHex(i, j, new Hex());
						}
					}
				}
			});
		}
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Main.water = new Water();
				Main.water.start();
			}
		});		
		
	}

}
