package techreborn.compat.minetweaker;

import minetweaker.MineTweakerAPI;
import minetweaker.api.item.IIngredient;
import minetweaker.api.item.IItemStack;
import minetweaker.api.item.IngredientStack;
import minetweaker.api.liquid.ILiquidStack;
import minetweaker.api.oredict.IOreDictEntry;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
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.event.FMLServerStartingEvent;
import net.minecraftforge.fml.relauncher.ReflectionHelper;
import techreborn.compat.ICompatModule;

import static minetweaker.api.minecraft.MineTweakerMC.getItemStack;
import static minetweaker.api.minecraft.MineTweakerMC.getLiquidStack;


public class MinetweakerCompat implements ICompatModule {
    @Override
    public void preInit(FMLPreInitializationEvent event) {

    }

    @Override
    public void init(FMLInitializationEvent event) {

    }

    @Override
    public void postInit(FMLPostInitializationEvent event) {
        MineTweakerAPI.registerClass(MTAlloySmelter.class);
        MineTweakerAPI.registerClass(MTAssemblingMachine.class);
        MineTweakerAPI.registerClass(MTBlastFurnace.class);
        MineTweakerAPI.registerClass(MTCentrifuge.class);
        MineTweakerAPI.registerClass(MTChemicalReactor.class);
        MineTweakerAPI.registerClass(MTIndustrialGrinder.class);
        MineTweakerAPI.registerClass(MTImplosionCompressor.class);
        MineTweakerAPI.registerClass(MTIndustrialElectrolyzer.class);
        MineTweakerAPI.registerClass(MTIndustrialSawmill.class);
        MineTweakerAPI.registerClass(MTPlateCuttingMachine.class);
        MineTweakerAPI.registerClass(MTFusionReactor.class);
        MineTweakerAPI.registerClass(MTVacuumFreezer.class);
        MineTweakerAPI.registerClass(MTGenerator.class);
        MineTweakerAPI.registerClass(MTRollingMachine.class);
    }

    @Override
    public void serverStarting(FMLServerStartingEvent event) {

    }

    public static ItemStack toStack(IItemStack iStack) {
        return getItemStack(iStack);
    }

    public static Object toObject(IIngredient iStack) {
        if (iStack == null)
            return null;
        else {
            if (iStack instanceof IOreDictEntry)
                return ((IOreDictEntry) iStack).getName();
            else if (iStack instanceof IItemStack)
                return getItemStack((IItemStack) iStack);
            else if (iStack instanceof IngredientStack) {
                IIngredient ingr = ReflectionHelper.getPrivateValue(IngredientStack.class, (IngredientStack) iStack, "ingredient");
                return toObject(ingr);
            } else
                return null;
        }
    }

    public static FluidStack toFluidStack(ILiquidStack iStack) {
        return getLiquidStack(iStack);
    }

}