package thaumcraft.api.crafting;

import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import thaumcraft.api.ThaumcraftApiHelper;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;

import java.util.ArrayList;

public class CrucibleRecipe
{
    public ItemStack recipeOutput;
    public Object catalyst;
    public AspectList aspects;
    public String key;

    public CrucibleRecipe(String researchKey, ItemStack result, Object cat, AspectList tags)
    {
        recipeOutput = result;
        this.aspects = tags;
        this.key = researchKey;
        this.catalyst = cat;

        if (cat instanceof String)
        {
            this.catalyst = OreDictionary.getOres((String) cat);
        }
    }

    public boolean matches(AspectList itags, ItemStack cat)
    {
        if (catalyst instanceof ItemStack &&
                !ThaumcraftApiHelper.itemMatches((ItemStack) catalyst, cat, false))
        {
            return false;
        } else if (catalyst instanceof ArrayList && ((ArrayList<ItemStack>) catalyst).size() > 0)
        {
            if (!ThaumcraftApiHelper.containsMatch(true, ((ArrayList<ItemStack>) catalyst).toArray(new ItemStack[]{}), cat))
                return false;
        }

        if (itags == null)
        {
            return false;
        }

        for (Aspect tag : aspects.getAspects())
        {
            if (itags.getAmount(tag) < aspects.getAmount(tag))
            {
                return false;
            }
        }

        return true;
    }

    public AspectList removeMatching(AspectList itags)
    {
        AspectList temptags = new AspectList();
        temptags.aspects.putAll(itags.aspects);

        for (Aspect tag : aspects.getAspects())
        {
            temptags.remove(tag, aspects.getAmount(tag));
//			if (!temptags.remove(tag, aspects.getAmount(tag))) return null;
        }

        itags = temptags;
        return itags;
    }
}