package gtclassic.common.proxy;

import gtclassic.GTMod;
import gtclassic.api.color.GTColorBlock;
import gtclassic.api.color.GTColorItem;
import gtclassic.api.interfaces.IGTColorBlock;
import gtclassic.api.interfaces.IGTColorItem;
import gtclassic.common.GTIcons;
import gtclassic.common.GTItems;
import gtclassic.common.GTJei;
import gtclassic.common.tile.GTTileDisplayScreen;
import gtclassic.common.util.GTRenderDisplayScreen;
import gtclassic.common.util.render.GTModelLoader;
import ic2.core.platform.textures.Ic2Icons.SpriteReloadEvent;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.ItemColors;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;

@Mod.EventBusSubscriber(Side.CLIENT)
public class GTProxyClient extends GTProxyCommon {

	@Override
	public void preInit(FMLPreInitializationEvent e) {
		super.preInit(e);
		MinecraftForge.EVENT_BUS.register(this);
		ModelLoaderRegistry.registerLoader(new GTModelLoader());
	}

	@Override
	public void init(FMLInitializationEvent e) {
		super.init(e);
		registerTintedBlocks();
		registerTintedItems();
		MinecraftForge.EVENT_BUS.register(this);
		this.onRegisterRender();
	}

	@Override
	public void postInit(FMLPostInitializationEvent e) {
		GTJei.initEntries();
	}

	@SubscribeEvent
	public void onIconLoad(SpriteReloadEvent event) {
		GTIcons.loadSprites();
	}

	@SubscribeEvent
	public static void onRegisterTexture(TextureStitchEvent.Pre event) {
		event.getMap().registerSprite(new ResourceLocation(GTMod.MODID, "fluids/fluid"));
		event.getMap().registerSprite(new ResourceLocation(GTMod.MODID, "fluids/fluidflowing"));
		event.getMap().registerSprite(new ResourceLocation(GTMod.MODID, "fluids/gas"));
		event.getMap().registerSprite(new ResourceLocation(GTMod.MODID, "fluids/gasflowing"));
		event.getMap().registerSprite(new ResourceLocation(GTMod.MODID, "fluids/magicdye"));
		event.getMap().registerSprite(new ResourceLocation(GTMod.MODID, "fluids/magicdyeflowing"));
	}

	public void onRegisterRender() {
		ClientRegistry.bindTileEntitySpecialRenderer(GTTileDisplayScreen.class, new GTRenderDisplayScreen());
	}

	@SubscribeEvent
	public static void registerModels(ModelRegistryEvent event) {
		GTItems.testTube.initModel();
	}

	public static void registerTintedItems() {
		GTColorItem colors = new GTColorItem();
		ItemColors registry = Minecraft.getMinecraft().getItemColors();
		for (Item item : Item.REGISTRY) {
			if (item instanceof IGTColorItem) {
				registry.registerItemColorHandler(colors, item);
			}
		}
	}

	public static void registerTintedBlocks() {
		GTColorBlock colors = new GTColorBlock();
		BlockColors registry = Minecraft.getMinecraft().getBlockColors();
		for (Block block : Block.REGISTRY) {
			if (block instanceof IGTColorBlock) {
				registry.registerBlockColorHandler(colors, block);
			}
		}
	}
}