package main.HUD;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

import ea.Knoten;
import ea.Ticker;
import main.Main;

public class Herzen extends Knoten implements Ticker{
	private final static int SCALE = 50;
	private BufferedImage volles_Herz;
	private BufferedImage halbes_Herz;
	private BufferedImage leeres_Herz;
	private BufferedImage hauptBild;
	private BufferedImage[] HPLeiste;
	private boolean shakingSwitch;
	private float HPVel = 0.3f;
	private int counter = 0;
	private float lastHP;
	private int y;
	private int HPLeisteY[];

	public Herzen() {
		// inizialisieren der Variablen, laden der Bilder und für den ticker anmelden
		HPLeiste = new BufferedImage[5];
		HPLeisteY = new int [HPLeiste.length];
		try {
			hauptBild = ImageIO.read(HUD.class.getResourceAsStream("/res/images/icons.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		BufferedImage buff;
		// volles_Herz:
		buff = hauptBild.getSubimage(16, 0, 16, 16);
		volles_Herz = buff;
		// halbes_Herz:
		buff = hauptBild.getSubimage(32, 0, 16, 16);
		halbes_Herz = buff;
		// leeres_Herz
		buff = hauptBild.getSubimage(48, 0, 16, 16);
		leeres_Herz = buff;
		HPLeiste[0] = volles_Herz;
		HPLeiste[1] = volles_Herz;
		HPLeiste[2] = volles_Herz;
	}

	private int shakeY() {
		shakingSwitch = !shakingSwitch;
			if (shakingSwitch == true) {
				return 3;
			}
		return 0;
	}
	
	private int regenY() {
		if (HPVel > 0) {
			if (counter < HPLeiste.length + 1) {
				counter++;
				if (counter * 4 < HPLeiste.length + 1) {
					return 3;
				} else {
					return 0;
				}
			} else {
				counter = 0;
			}
		}
		return 0;
	}

	// wird alle 200ms ausgeführt:
	public void tick() {
		// teilt den Wert der HP in Teile auf, welche der Anzahl der Herzen entspricht
		// und prüft dann für den eigenen Teil des Herzens, ob das jeweilige Herz voll,
		// halb oder leer ist (BIG BRAIN):
		HPVel = Main.instance.getWorld().getPlayer().getHP() - lastHP;
		lastHP = Main.instance.getWorld().getPlayer().getHP();
		float localeHP;
		for (int i = 0; i < HPLeiste.length; i++) {
			localeHP = Main.instance.getWorld().getPlayer().getHP();
			localeHP -= ((float) i) * (1f / HPLeiste.length);
			if (localeHP <= 0f) {
				HPLeiste[i] = leeres_Herz;
			} else if (localeHP < (1 / (float) (2 * HPLeiste.length))) {
				HPLeiste[i] = halbes_Herz;
			} else if (localeHP > 1 / (float) (2 * HPLeiste.length)) {
				HPLeiste[i] = volles_Herz;
			}
		}
		if(Main.instance.getWorld().getPlayer().getHP() < 0.33f) {
			y = shakeY();
		} else	{
			for (int i = 0; i < HPLeiste.length; i++) {
				HPLeisteY[i] = regenY();
			}

		}
	}

	// Zeichnet alle Herzen im Array HPLeiste[] auf den Bildschirm
	public void zeichnen(Graphics2D g) {
		for (int i = 0; i < HPLeiste.length; i++) {
			if(Main.instance.getWorld().getPlayer().getHP() < 0.33f) {
				g.drawImage(HPLeiste[i], (i + 2) * SCALE, y , SCALE, SCALE, null);
			} else {
				g.drawImage(HPLeiste[i], (i + 2) * SCALE, HPLeisteY[i] , SCALE, SCALE, null);
			}
		}
	}
}
