package flyweight;

import java.util.HashMap;
import java.util.Map;

public class SimpleItem implements Item {

	private static Map<Integer, ItemQualifier> qualifiers = new HashMap<Integer, ItemQualifier>();
	private ItemQualifier iq;
	private int age;
	private int hitPoints;

	public static int numItemQualifiers() {
		return SimpleItem.qualifiers.keySet().size();
	}

	public SimpleItem(int initialHP, double weight, String name, String desc) {
		hitPoints = initialHP;
		ItemQualifier iqAux = new ItemQualifier(name, desc, weight);
		if (SimpleItem.qualifiers.containsKey(iqAux.hashCode())) {
			iq = SimpleItem.qualifiers.get(iqAux.hashCode());
		} else {
			iq = iqAux;
			SimpleItem.qualifiers.put(iqAux.hashCode(), iqAux);
		}
	}

	public SimpleItem() {
		this(0, 0.0, "", "");
	}

	public int getAge() {
		return age;
	}

	public int getHitPoints() {
		return hitPoints;
	}

	public double getValue() {
		return 10.0 * hitPoints;
	}

	public double getWeight() {
		return iq.getWeight();
	}

	public void setDamage(int damage) {
		if (damage > hitPoints) {
			hitPoints = 0;
		} else {
			hitPoints -= damage;
		}
	}

	public String getDescription() {
		return iq.getDescription();
	}

	public String getName() {
		return iq.getName();
	}

	public String toString() {
		return iq + ", HP = " + hitPoints + ", Age = " + age; 
	}
}
