package fi.dy.masa.enderutilities.inventory.item;

import java.util.UUID;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import fi.dy.masa.enderutilities.util.nbt.OwnerData;

public class InventoryItemPermissions extends InventoryItem
{
    protected UUID accessorUUID;

    public InventoryItemPermissions(ItemStack containerStack, int invSize, int stackLimit, boolean allowCustomStackSizes,
            boolean isRemote, EntityPlayer player)
    {
        this(containerStack, invSize, stackLimit, allowCustomStackSizes, isRemote, player, "Items");
    }

    public InventoryItemPermissions(ItemStack containerStack, int invSize, int stackLimit, boolean allowCustomStackSizes,
            boolean isRemote, EntityPlayer player, String tagName)
    {
        this(containerStack, invSize, stackLimit, allowCustomStackSizes, isRemote, player, tagName, null, null);
    }

    public InventoryItemPermissions(ItemStack containerStack, int invSize, int stackLimit, boolean allowCustomStackSizes,
            boolean isRemote, EntityPlayer player, String tagName, UUID containerUUID, IItemHandler hostInv)
    {
        super(containerStack, invSize, stackLimit, allowCustomStackSizes, isRemote, tagName,containerUUID, hostInv);

        if (player != null)
        {
            this.accessorUUID = player.getUniqueID();
        }
    }

    @Override
    public boolean isCurrentlyAccessible()
    {
        //System.out.println("InventoryItemPermissions#isCurrentlyAccessible() - " + (this.isRemote ? "client" : "server"));
        return this.isAccessibleBy(this.accessorUUID);
    }

    @Override
    public boolean isAccessibleBy(Entity entity)
    {
        //System.out.println("InventoryItemPermissions#isAccessibleByPlayer() - " + (this.isRemote ? "client" : "server"));
        return OwnerData.canAccessItem(this.getContainerItemStack(), entity);
    }

    @Override
    public boolean isAccessibleBy(UUID uuid)
    {
        //System.out.println("InventoryItemPermissions#isAccessibleBy() - " + (this.isRemote ? "client" : "server"));
        return OwnerData.canAccessItem(this.getContainerItemStack(), uuid);
    }
}