/**
 * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
 * http://www.mod-buildcraft.com
 *
 * BuildCraft is distributed under the terms of the Minecraft Mod Public
 * License 1.0, or MMPL. Please check the contents of the license located in
 * http://www.mod-buildcraft.com/MMPL-1.0.txt
 */
package buildcraft.core.inventory;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;

public abstract class InventoryWrapper implements ISidedInventory {

	IInventory inventory;

	public InventoryWrapper(IInventory inventory) {
		this.inventory = inventory;
	}

	/* DIRECT MAPPING */
	@Override public int getSizeInventory() { return inventory.getSizeInventory(); }
	@Override public ItemStack getStackInSlot(int slotIndex) { return inventory.getStackInSlot(slotIndex); }
	@Override public ItemStack decrStackSize(int slotIndex, int amount) { return inventory.decrStackSize(slotIndex, amount); }
	@Override public ItemStack getStackInSlotOnClosing(int slotIndex) { return inventory.getStackInSlotOnClosing(slotIndex); }
	@Override public void setInventorySlotContents(int slotIndex, ItemStack itemstack) { inventory.setInventorySlotContents(slotIndex, itemstack); }
	@Override public String getInventoryName() { return inventory.getInventoryName(); }
	@Override public int getInventoryStackLimit() { return inventory.getInventoryStackLimit(); }
	@Override public void markDirty() { inventory.markDirty(); }
	@Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return inventory.isUseableByPlayer(entityplayer); }
	@Override public void openInventory() { inventory.openInventory(); }
	@Override public void closeInventory() { inventory.closeInventory(); }
	@Override public boolean isItemValidForSlot(int slotIndex, ItemStack itemstack) { return inventory.isItemValidForSlot(slotIndex, itemstack); }
	@Override public boolean hasCustomInventoryName() { return inventory.hasCustomInventoryName(); };

	/* STATIC HELPER */
	public static ISidedInventory getWrappedInventory(Object inventory) {
		if(inventory instanceof ISidedInventory)
			return (ISidedInventory)inventory;
		else if(inventory instanceof IInventory)
			return new InventoryWrapperSimple(InvUtils.getInventory((IInventory)inventory));
		else
			return null;
	}
}
