package openmods.gui.component;

import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import openmods.gui.Icon;

public class GuiComponentSprite extends BaseComponent {

	public static Icon adaptSprite(TextureAtlasSprite icon) {
		return new Icon(TextureMap.LOCATION_BLOCKS_TEXTURE, icon.getMinU(), icon.getMaxU(), icon.getMinV(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight());
	}

	protected Icon icon;
	protected float r = 1, g = 1, b = 1;
	protected boolean overlay_mode;

	public boolean isOverlay() {
		return overlay_mode;
	}

	public BaseComponent setOverlayMode(boolean isOverlay) {
		this.overlay_mode = isOverlay;
		return this;
	}

	public static class Sprites {
		public static Icon hammer = Icon.createSheetIcon(WIDGETS, 0, 233, 23, 23);
		public static Icon plus = Icon.createSheetIcon(WIDGETS, 23, 242, 13, 13);
		public static Icon result = Icon.createSheetIcon(WIDGETS, 36, 241, 22, 15);
	}

	public GuiComponentSprite(int x, int y) {
		this(x, y, (Icon)null);
	}

	public GuiComponentSprite(int x, int y, Icon icon) {
		super(x, y);
		this.icon = icon;
	}

	public GuiComponentSprite(int x, int y, TextureAtlasSprite icon) {
		this(x, y, adaptSprite(icon));
	}

	public GuiComponentSprite setColor(float r, float g, float b) {
		this.r = r;
		this.g = g;
		this.b = b;
		return this;
	}

	@Override
	public void render(int offsetX, int offsetY, int mouseX, int mouseY) {
		if (!overlay_mode) doRender(offsetX, offsetY, mouseX, mouseY);
	}

	@Override
	public void renderOverlay(int offsetX, int offsetY, int mouseX, int mouseY) {
		if (overlay_mode) doRender(offsetX, offsetY, mouseX, mouseY);
	}

	protected void doRender(int offsetX, int offsetY, int mouseX, int mouseY) {
		if (icon == null) return;

		GlStateManager.color(r, g, b);
		drawSprite(icon, offsetX + x, offsetY + y);
	}

	@Override
	public int getWidth() {
		return icon != null? icon.width : 0;
	}

	@Override
	public int getHeight() {
		return icon != null? icon.height : 0;
	}

	public void setIcon(Icon icon) {
		this.icon = icon;
	}

	public void setIcon(TextureAtlasSprite icon) {
		this.icon = adaptSprite(icon);
	}
}