package WayofTime.bloodmagic.api.livingArmour;

import java.util.List;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import WayofTime.bloodmagic.livingArmour.LivingArmour;

public abstract class StatTracker
{
    private boolean isDirty = false;

    public abstract String getUniqueIdentifier();

    /**
     * When called the StatTracker should reset all of its data, including
     * upgrades.
     */
    public abstract void resetTracker();

    public abstract void readFromNBT(NBTTagCompound tag);

    public abstract void writeToNBT(NBTTagCompound tag);

    /**
     * Called each tick to update the tracker's information. Called in
     * LivingArmour
     * 
     * @param world
     *        World the player is in
     * @param player
     *        The player that has the armour equipped
     * @param livingArmour
     *        The equipped LivingArmour
     * @return True if there is a new upgrade unlocked this tick.
     */
    public abstract boolean onTick(World world, EntityPlayer player, LivingArmour livingArmour);

    public abstract void onDeactivatedTick(World world, EntityPlayer player, LivingArmour livingArmour);

    public abstract List<LivingArmourUpgrade> getUpgrades();

    /**
     * Used to obtain the progress from the current level to the next level.
     * 
     * 0.0 being 0% - 1.0 being 100%.
     * 
     * @param livingArmour
     *        The equipped LivingArmour
     * @return the progress from the current level to the next level.
     */
    public double getProgress(LivingArmour livingArmour, int currentLevel)
    {
        return 1.0D;
    }

    public final boolean isDirty()
    {
        return isDirty;
    }

    public final void markDirty()
    {
        this.isDirty = true;
    }

    public final void resetDirty()
    {
        this.isDirty = false;
    }

    public abstract boolean providesUpgrade(String key);

    public abstract void onArmourUpgradeAdded(LivingArmourUpgrade upgrade);
}
