import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.SwingUtilities;

/**
 * Odbiornik zdarzeń związanych ze stołem gry
 * 
 *
 */
public final class TableListener implements MouseListener, MouseMotionListener {
	int s=Tablepane.s;
	int bs=Tablepane.bs;

	public void mouseClicked(MouseEvent e) {}

	public void mouseEntered(MouseEvent e) {}

	/**
	 * Kasuje niebieski focus po opuszczeniu stołu gry przez kursor myszy
	 */
	public void mouseExited(MouseEvent e) {
		final Tablepane myobject = (Tablepane)e.getSource();
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				myobject.setblue(1000, 1000);				
			}
		});
	}

	
	/**
	 * Ustawia czerwone zaznaczenie {@link Tablepane#setred} lub/i obraca element
	 */
	public void mousePressed(MouseEvent e) {
		final int y=e.getY()/Tablepane.s*2/3;
		final int x=(e.getX() - ((y%2)*Tablepane.bs/2))/bs;
		
		final Tablepane myobject = (Tablepane)e.getSource();
		
		if (myobject == Main.window.table.next)
			return;
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				myobject.setred(x, y);
				
				if (myobject == Main.window.table.tablepane){
					if(myobject.table[x][y] != null)
						myobject.table[x][y].rotate();
					else{
						myobject.addHex(x, y, Main.window.table.tray.table[Main.window.table.tray.isset[0]][Main.window.table.tray.isset[1]]);
						Main.window.table.tray.addHex(Main.window.table.tray.isset[0], Main.window.table.tray.isset[1], Main.window.table.next.table[1][0]);
						Main.window.table.next.addHex(1, 0, Main.window.table.next.table[0][0]);
						Main.window.table.next.addHex(0, 0, new Hex());
					}
				}					
			}
		});
	}

	
	public void mouseReleased(MouseEvent e) {}

	
	public void mouseDragged(MouseEvent e) {}

	
	/**
	 * Ustawia niebieskie zaznaczenie
	 */
	public void mouseMoved(MouseEvent e) {
		final int y=e.getY()/s*2/3;
		final int x=(e.getX() - (y%2*bs/2))/bs;
				
		final Tablepane myobject = (Tablepane)e.getSource();
		
		if (myobject == Main.window.table.next)
			return;
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				myobject.setblue(x, y);				
			}
		});
	}

}
