/** 
 * Copyright (c) SpaceToad, 2011
 * 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.api.bptblocks;

import buildcraft.api.blueprints.BptBlock;
import buildcraft.api.blueprints.BptSlotInfo;
import buildcraft.api.blueprints.IBptContext;
import java.util.LinkedList;
import net.minecraft.item.ItemStack;

@Deprecated
public class BptBlockRotateMeta extends BptBlock {

	int[] rot;
	boolean rotateForward;

	int infoMask = 0;

	public BptBlockRotateMeta(int blockId, int[] rotations, boolean rotateForward) {
		super(blockId);

		rot = rotations;

		for (int i = 0; i < rot.length; ++i) {
			if (rot[i] < 4) {
				infoMask = (infoMask < 3 ? 3 : infoMask);
			} else if (rot[i] < 8) {
				infoMask = (infoMask < 7 ? 7 : infoMask);
			} else if (rot[i] < 16) {
				infoMask = (infoMask < 15 ? 15 : infoMask);
			}
		}

		this.rotateForward = rotateForward;
	}

	@Override
	public void addRequirements(BptSlotInfo slot, IBptContext context, LinkedList<ItemStack> requirements) {
		requirements.add(new ItemStack(slot.blockId, 1, 0));
	}

	@Override
	public boolean isValid(BptSlotInfo slot, IBptContext context) {
		return slot.blockId == context.world().getBlockId(slot.x, slot.y, slot.z);
	}

	@Override
	public void rotateLeft(BptSlotInfo slot, IBptContext context) {
		int pos = slot.meta & infoMask;
		int others = slot.meta - pos;

		if (rotateForward) {
			if (pos == rot[0]) {
				pos = rot[1];
			} else if (pos == rot[1]) {
				pos = rot[2];
			} else if (pos == rot[2]) {
				pos = rot[3];
			} else if (pos == rot[3]) {
				pos = rot[0];
			}
		} else {
			if (pos == rot[0]) {
				pos = rot[3];
			} else if (pos == rot[1]) {
				pos = rot[2];
			} else if (pos == rot[2]) {
				pos = rot[0];
			} else if (pos == rot[3]) {
				pos = rot[1];
			}
		}

		slot.meta = pos + others;
	}

}
