import java.awt.*;
// Botão que desenha os pinos:
public class Pinos extends Canvas
{
	private Image offScreenImage;
	private static Image IPino, IBuraco, IPinoP, IBuracoP;
	private static int T;
	private static boolean redesenha = true;
        private Color Cor = new Color(0);
	private Dimension Tamanho;
	public int X, Y, Status, Tabuleiro_X, Tabuleiro_Y;

	public Pinos(Color c, int tamanho, int Cord_X, int Cord_Y, int x, int y)
	{
		resize(tamanho, tamanho);
		Tabuleiro_X = x;
		Tabuleiro_Y = y;
		X = Cord_X;
		Y = Cord_Y;
		T = tamanho;
		Tamanho = new Dimension(tamanho, tamanho);
		Cor = c;
	}

	public void MudaStatus (int S)
	{ // Muda a figura
		Status = S;
		repaint();
	}
	
	public void MudaTamanho(int t)
	{
		redesenha = true;
		T = t;
		resize(T, T);
		Tamanho = new Dimension(T, T);
	}

	private void Disco(Graphics g, double x, double y, double r, Color c)
	{ // Desenha os discos
	       int X = (int) x, Y = (int) y, R = (int) r;
		g.setColor(c);
		g.fillOval(X, Y, R, R);
	}
		
	private void Pino(Graphics g, int x, int y, int T, Color c)
	{ // Desenha o Pino proporcional ao tamanho
	        double F = (double) T / 16;
		g.setColor(c);
		g.fillRect(x, y, T, T);
		Disco(g, x + F, y + F, T - F, Color.black); 
		Disco(g, (double) x, (double) y, T - 2 * F, Color.cyan);
		Disco(g, x + (6.0 * F), Y + (6.0 * F), T / 2 - 1, Color.blue);
		Disco(g, x + F, y + F, T / 2, Color.white);
		Disco(g, x + 9.0 * F, y + 9.0 * F, 3.0 * F, Color.white); 
	}

	private void Buraco(Graphics g, int x, int y, int T, Color c)
	{
	        double F = (double) T / 16; 
		g.setColor(c);
		g.fillRect(x, y, T, T);
		Disco(g, x + F, y + F, 12.0 * F, Color.black);
		Disco(g, x + 4 * F, y  + 4 * F, 10 * F, Color.blue);
		g.setColor(Color.cyan);
		g.drawArc(x , y, (int) (14 * F), (int) (14 * F), -135, 180);
	}
	public void update(Graphics g)
	{
		// Não faz nada
		paint(g);
	}
	
	public void paint(Graphics g)
	{
		// Metodo de buffering Duplo para reduzir possíveis tremulações:
		// Além disso, só redesenha a imagem se necessário

		int Largura = size().width, Altura = size().height;
		if (redesenha) // Se mudou o tamanho do pino redesenha as figuras
		{
			IPino = createImage(size().width, size().height);
			IBuraco = createImage(size().width, size().height);
			IPinoP = createImage(size().width, size().height);
			IBuracoP = createImage(size().width, size().height);
			Graphics offScreenGraphics = IPino.getGraphics();
			if (X > Y) Pino(offScreenGraphics, X, Y, Altura - X, Color.blue);
				else Pino(offScreenGraphics, X, Y, Largura - Y, Color.blue);
			offScreenGraphics = IBuraco.getGraphics();
			if (X > Y) Buraco(offScreenGraphics, X, Y, Altura - X, Color.blue);
				else Buraco(offScreenGraphics, X, Y, Largura - Y, Color.blue);
			offScreenGraphics = IPinoP.getGraphics();
			if (X > Y) Pino(offScreenGraphics, X, Y, Altura - X, Color.red);
				else Pino(offScreenGraphics, X, Y, Largura - Y, Color.red);
			offScreenGraphics = IBuracoP.getGraphics();
			if (X > Y) Buraco(offScreenGraphics, X, Y, Altura - X, Color.red);
				else Buraco(offScreenGraphics, X, Y, Largura - Y, Color.red);
			redesenha = false;
		}
		if (Status == 0) //Desenha na tela
			g.drawImage(IPino, 0, 0, this);
		else if (Status == 1)
			g.drawImage(IBuraco, 0, 0, this);
			else if (Status == 2)
			{
				g.setColor(Color.blue);
				g.fillRect(X, Y, Largura - X, Altura - Y);
			}
			else if (Status == 3)
				g.drawImage(IPinoP, 0, 0, this);
				else
					g.drawImage(IBuracoP, 0, 0, this);
	}
	public boolean mouseDown(Event evt,int x,int y)
	{ // Altera evt de forma que possa ser reconhecido pelo parent
		evt.id = Event.ACTION_EVENT;
		return false;
	}

}