import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;

/**
 * Reprezentacja rury
 * 
 *
 */
public final class Hexelem extends JComponent{
	
	BufferedImage img;
	/**numer krawędzi wlotowej i wylotowej*/
	public int input, output;
	/**stopień zapełnienia rury wodą*/
	public int full; 
	
	/**
	 * Konstruktor domyślny
	 * @param i krawędź wlotowa
	 * @param j krawędź wylotowa
	 */
	public Hexelem(int i, int j){
		input = i;
		output = j;
		full = 0;
			
		String path = (output+6-input)%6 + ".png";
		java.net.URL imgURL = getClass().getResource(path);
		try {
			img = ImageIO.read(imgURL);
		}
		catch (IOException e) {System.out.println("dupa");}
	}
	/**
	 * Konstruktor specjalny
	 * @param kind rodzaj elementu
	 */
	public Hexelem(String kind){
		String path = kind + ".png";
		full = 11;
		java.net.URL imgURL = getClass().getResource(path);
		try {
			img = ImageIO.read(imgURL);
		}
		catch (IOException e) {System.out.println("dupa");}
	}

	public Dimension getPreferredSize() {
        return new Dimension(Tablepane.bs,Tablepane.s*2);
    }
	
	public void paintComponent(Graphics g){
		Graphics2D g2d = (Graphics2D)g;	
		
		g2d.setRenderingHints(new RenderingHints(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR));
				
		g2d.rotate(-Math.PI*input/3, Tablepane.bs/2, Tablepane.s);
		g2d.drawImage(img, 0, 0, null);
		
	
	}
	
	/**
	 * Obracanie elementu
	 * wywoływane przez {@link TableListener}
	 */
	public void rotate(){
			
		input = (input+5)%6;
		output = (output+5)%6;
		
		repaint();
	}
	
	/**
	 * Dolewa wodę
	 * wywoływane przez {@link Water}
	 * @param in numer krawędzi wlotowej
	 * @return true jeśli element niepełny, w przeciwnym przypadku false
	 */
	public boolean pour(int in){
		if(full == 11)
			return false;
		full++;
		
		if(in != input){
			output = input;
			input = in;
		}
		
		String path = (output+6-input)%6 + "-" + full +".png";
		java.net.URL imgURL = getClass().getResource(path);
		try {
			img = ImageIO.read(imgURL);
		}
		catch (IOException e) {System.out.println("dupa");}
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				repaint();
			}
		});
				
		return true;
	}
	
}
