package gtPlusPlus.xmod.gregtech.common.blueprint;

import gregtech.api.enums.TAE;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.xmod.gregtech.api.objects.MultiblockBlueprint;
import gtPlusPlus.xmod.gregtech.api.objects.MultiblockLayer;
import net.minecraft.block.Block;

public class Blueprint_LFTR extends MultiblockBlueprint {

	public Blueprint_LFTR() {
		super(7, 4, 7, 10, TAE.GTPP_INDEX(12));


		Block aCasingMain = ModBlocks.blockCasingsMisc;
		int aMetaCasingMain = 12;
		int aMetaCasingSecondary = 13;

		
		
		/**
		 * First Layer (All edges can be Hatches, controller is centered in the front)
		 */
		
		MultiblockLayer a0 = new MultiblockLayer(7, 7);
		for (int i = 0; i < 7; i++) {
			a0.addBlockForPos(aCasingMain, aMetaCasingMain, i, 0, true);			
		}
		for (int i = 0; i < 7; i++) {
			for (int u = 1; u < 6; u++) {
				a0.addBlockForPos(aCasingMain, aMetaCasingMain, i, u, i == 0 ? true : i == 6 ? true : false);		
			}
		}
		for (int i = 0; i < 7; i++) {
			if (i != 3) {
				a0.addBlockForPos(aCasingMain, aMetaCasingMain, i, 6, true);					
			}
			else {	
				a0.addController(i, 6);				
			}		
		}
		a0.lock(true);


		
		
		/**
		 * Middle Layer(s)
		 */
		
		MultiblockLayer a1 = new MultiblockLayer(7, 7);
		for (int i = 0; i < 7; i++) {
			a1.addBlockForPos(aCasingMain, aMetaCasingSecondary, i, 0, false);			
		}
		for (int i = 0; i < 7; i++) {
			for (int u = 1; u < 6; u++) {
				if (i == 0 || i == 6)
					a1.addBlockForPos(aCasingMain, aMetaCasingSecondary, i, u, false);		
			}
		}
		for (int i = 0; i < 7; i++) {
			a1.addBlockForPos(aCasingMain, aMetaCasingSecondary, i, 6, false);					

		}
		a1.lock(true);

		
		/**
		 * Top Layer  (All edges can be Hatches, Mufflers required in inner 3x3)
		 */
		
		MultiblockLayer a2 = new MultiblockLayer(7, 7);
		for (int i = 0; i < 7; i++) {
			a2.addBlockForPos(aCasingMain, aMetaCasingMain, i, 0, true);			
		}
		for (int i = 0; i < 7; i++) {
			for (int u = 1; u < 6; u++) {				
				if ((i == 2 || i == 3 || i == 4) && (u == 2 || u ==3 || u == 4)) {
					a2.addMuffler(aCasingMain, aMetaCasingMain, i, u);
				}
				else {
					a2.addBlockForPos(aCasingMain, aMetaCasingMain, i, u, true);					
				}					
			}
		}
		for (int i = 0; i < 7; i++) {
			a2.addBlockForPos(aCasingMain, aMetaCasingMain, i, 6, true);				
		}
		a2.lock(true);

		this.setLayer(a0, 0);
		this.setLayer(a1, 1);
		this.setLayer(a1, 2);
		this.setLayer(a2, 3);
	}

	@Override
	public int getMinimumInputBus() {
		return 0;
	}

	@Override
	public int getMinimumInputHatch() {
		return 4;
	}

	@Override
	public int getMinimumOutputBus() {
		return 0;
	}

	@Override
	public int getMinimumOutputHatch() {
		return 4;
	}

	@Override
	public int getMinimumInputEnergy() {
		return 0;
	}

	@Override
	public int getMinimumOutputEnergy() {
		return 4;
	}

	@Override
	public int getMinimumMaintHatch() {
		return 1;
	}

	@Override
	public int getMinimumMufflers() {
		return 4;
	}

}