package net.minecraft.src.weasel;

import net.minecraft.src.NBTTagCompound;
import net.minecraft.src.PC_INBT;

public abstract class WeaselObject implements PC_INBT {

	private WeaselObjectType type = null;

	public WeaselObject(WeaselObjectType type) {

	}

	@Override
	public NBTTagCompound writeToNBT(NBTTagCompound tag) {
		tag.setInteger("type", type.getIndex());
		return tag;
	}

	public static WeaselObject loadWrappedObjectFromNBT(NBTTagCompound outerTag, String wrappingTagName){
		return loadObjectFromNBT(outerTag.getCompoundTag(wrappingTagName));
	}

	/**
	 * Load object written into NBT tag
	 * @param tag the tag with object
	 * @return the object
	 */
	public static WeaselObject loadObjectFromNBT(NBTTagCompound tag) {
		WeaselObject obj = null;
	
		switch (WeaselObjectType.getTypeFromIndex(tag.getInteger("type"))) {
	
			case BOOLEAN:
				obj = new WeaselBoolean();
				obj.readFromNBT(tag);
				break;
	
			case INTEGER:
				obj = new WeaselInteger();
				obj.readFromNBT(tag);
				break;
				
			case STRING:
				obj = new WeaselString();
				obj.readFromNBT(tag);
				break;
	
			case VARIABLE_LIST:
				obj = new WeaselVariableList();
				obj.readFromNBT(tag);
				break;
	
			case STACK:
				obj = new WeaselStack();
				obj.readFromNBT(tag);
				break;
	
		}
	
		return obj;
	}
}
