import javax.swing.JDialog;
import javax.swing.JSlider;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.SwingUtilities;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/** 
 * Okno ustawień prędkości płynięcia wody {@link Water} 
 * 
 *
 */

public class SpeedDialog extends JDialog implements ActionListener, ChangeListener{
		JLabel score;
		JSlider slider;
		
	public SpeedDialog(){
		super();
		setTitle("Regulacja prędkości");
		setResizable(false);
		setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
		
		setLayout(new GridLayout(4, 1));
		
		int speed=4;
				
		slider = new JSlider(JSlider.HORIZONTAL, 3, 15, speed);
		slider.addChangeListener(this);
		
		slider.setPaintLabels(true);
		slider.setMinorTickSpacing(1);
		slider.setPaintTicks(true);
				
		getContentPane().add(slider);
		
		score = new JLabel("Ustawiona prędkość: " + 4, JLabel.CENTER);
		getContentPane().add(score);
		
		JLabel label = new JLabel("<html>Naciśnięcie OK, spowoduje uruchomienie <br> nowej gry z nowymi ustawieniami...</html>", JLabel.CENTER);
		getContentPane().add(label);
		
		JPanel buttonpane = new JPanel();
		
		JButton okButton = new JButton("OK");
		okButton.addActionListener(this);
		buttonpane.add(okButton);
		JButton cancelButton = new JButton("Anuluj");
		cancelButton.addActionListener(this);
		buttonpane.add(cancelButton);
		
		getContentPane().add(buttonpane);
	}
	
	
	/**
	 * Przechwytuje zdarzenia związane z przyciskami w okienku
	 */
	public void actionPerformed(ActionEvent e){
		JButton button = (JButton)e.getSource();
		String text = button.getText();
		
		if(text.equals("OK")){
			synchronized(Main.water){
				Main.window.listener.newgame();
				Main.water.speed = slider.getValue();
			}
		}
		else{
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					synchronized(Main.water){
						slider.setValue(Main.water.speed);
					}
				}
			});
		}
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				setVisible(false);
			}
		});
				
	}
	
	
	/**
	 * Przechwytuje zdarzenia związane z przesunięciem suwaka
	 */
	public void stateChanged(ChangeEvent e){
		JSlider slider = (JSlider)e.getSource();
		final int value = slider.getValue();
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				score.setText("Ustawiona prędkość: " + value);
			}
		});		
	}
}
