package greymerk.roguelike.worldgen.blocks;

import greymerk.roguelike.worldgen.Cardinal;
import greymerk.roguelike.worldgen.MetaBlock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLog;
import net.minecraft.block.BlockNewLog;
import net.minecraft.block.BlockOldLog;
import net.minecraft.block.BlockPlanks;
import net.minecraft.init.Blocks;

public class Log {

	public static MetaBlock get(Wood type, Cardinal dir){
		
		MetaBlock log = new MetaBlock(getBlockId(type));
		
		setType(log, type);

		if(dir == null){
			log.withProperty(BlockLog.LOG_AXIS, BlockLog.EnumAxis.NONE);
			return log;
		}
		
		switch(dir){
		case UP:
		case DOWN: log.withProperty(BlockLog.LOG_AXIS, BlockLog.EnumAxis.Y); break;
		case EAST:
		case WEST: log.withProperty(BlockLog.LOG_AXIS, BlockLog.EnumAxis.X); break;
		case NORTH:
		case SOUTH: log.withProperty(BlockLog.LOG_AXIS, BlockLog.EnumAxis.Z); break;
		default: log.withProperty(BlockLog.LOG_AXIS, BlockLog.EnumAxis.NONE); break;
		}
		
		return log;
		
	}
	
	public static MetaBlock getLog(Wood type){
		return get(type, Cardinal.UP);
	}
	
	public static Block getBlockId(Wood type){
		switch(type){
		case OAK: return Blocks.LOG;
		case SPRUCE: return Blocks.LOG;
		case BIRCH: return Blocks.LOG;
		case JUNGLE: return Blocks.LOG;
		case ACACIA: return Blocks.LOG2;
		case DARKOAK: return Blocks.LOG2;
		default: return Blocks.LOG;
		}
	}
	
	public static void setType(MetaBlock log, Wood type){
		switch(type){
		case OAK: log.withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.OAK); return;
		case SPRUCE: log.withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.SPRUCE); return;
		case BIRCH: log.withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.BIRCH); return;
		case JUNGLE: log.withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.JUNGLE); return;
		case ACACIA: log.withProperty(BlockNewLog.VARIANT, BlockPlanks.EnumType.ACACIA); return;
		case DARKOAK: log.withProperty(BlockNewLog.VARIANT, BlockPlanks.EnumType.DARK_OAK); return;
		default: log.withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.OAK); return;
		}
	}
}