import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Color;

/**
 * Diese Klasse stellt einen Button dar.
 *
 * @author Felix Stupp
 * @version 26.04.2016
 */
public class Button extends GUI_Interface {
	
	boolean autoSize = true;
	Color foreC = Color.WHITE;
	Color backC = Color.BLACK;
	int textSize = 32; // as default text size
	String text = "";
	
	ButtonEvent handler;
	
	public Button(String txt, int size) {
		text = txt;
		textSize = size;
		redraw();
	}
	/**
	 * Erstellt einen Button mit dem gegebenen Objekt als Event-Handler.
	 * @param h Der Handler mit dem Interface ButtonEvent implementiert.
	 */
	public Button(ButtonEvent h) {
		handler = h;
		redraw();
	}
	public Button(String txt, int size, ButtonEvent h) {
		text = txt;
		textSize = size;
		handler = h;
		redraw();
	}
	
	/**
	 * Fragt ab, ob ein Klick auf den Button gekommen ist.
	 */
	public void act() {
		if(Greenfoot.mouseClicked(this) && handler != this) {
			handler.buttonClicked(this);
		}
	}
	
	public boolean getAutoSize() {
		return autoSize;
	}
	public void setAutoSize(boolean b) {
		autoSize = b;
		if(autoSize) {
			redraw();
		}
	}
	
	public int getTextSize() {
		return textSize;
	}
	public void setTextSize(int s) {
		if(textSize != s && s > 0) {
			textSize = s;
			redraw();
		}
	}
	
	public String getText() {
		return text;
	}
	public void setText(String s) {
		if(text != s) {
			text = s;
			redraw();
		}
	}
	
	public ButtonEvent getHandler() {
		return handler;
	}
	public void setHandler(ButtonEvent h) {
		handler = h;
	}
	public void removeHandler() {
		handler = null;
	}
	
	public void redraw() {
		GreenfootImage tI = new GreenfootImage(text,textSize,foreC,backC);
		GreenfootImage corner = new GreenfootImage("images/Button_Corner.png");
		int csx = corner.getWidth();
		int csy = corner.getHeight();
		GreenfootImage side = new GreenfootImage("images/Button_Side.png");
		if(autoSize) {
			sx = tI.getWidth() + (csx * 2) + 4;
			sy = tI.getHeight() + (csy * 2) + 4;
		}
		GreenfootImage all = new GreenfootImage(sx,sy);
		all.setColor(Color.BLACK);
		all.fill();
		all.drawImage(corner,0,0); // top left
		corner.rotate(90);
		all.drawImage(corner,sx-csx,0); // top right
		corner.rotate(90);
		all.drawImage(corner,sx-csx,sy-csy); // bottom right
		corner.rotate(90);
		all.drawImage(corner,0,sy-csy); // bottom left
		for(int i = csx; i > (sx-csx); i++) {
			all.drawImage(side,i,0); // top
			System.out.println("This is a test line at " + i);
		}
		side.rotate(90);
		for(int i = csy; i > (sy-csy); i++) {
			all.drawImage(side,sx-csx,i); // right
		}
		side.rotate(90);
		for(int i = csx; i > (sx-csx); i++) { // bottom
			all.drawImage(side,i,sy-csy);
		}
		side.rotate(90);
		for(int i = csy; i > (sy-csy); i++) { // left
			all.drawImage(side,0,i);
		}
		all.drawImage(tI,(sx-tI.getWidth())/2,(sy-tI.getHeight())/2);
		setImage(all);
	}
}
