package gregtech.loaders.preload;

import static gregtech.GT_Mod.GT_FML_LOGGER;
import static gregtech.api.multitileentity.enums.GT_MultiTileCasing.*;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

import gregtech.api.enums.Materials;
import gregtech.api.multitileentity.MultiTileEntityBlock;
import gregtech.api.multitileentity.MultiTileEntityRegistry;
import gregtech.api.multitileentity.multiblock.base.WallShareablePart;
import gregtech.api.multitileentity.multiblock.casing.BasicCasing;
import gregtech.common.tileentities.casings.functional.MotorCasing;
import gregtech.common.tileentities.casings.upgrade.InventoryUpgrade;
import gregtech.common.tileentities.machines.multiblock.MultiBlock_CokeOven;
import gregtech.common.tileentities.machines.multiblock.MultiBlock_Macerator;

public class GT_Loader_MultiTileEntities implements Runnable {

    public static int CASING_REGISTRY = 0;

    @Override
    public void run() {
        GT_FML_LOGGER.info("GT_Mod: Registering MultiTileEntities");
        // registerMachines();
        // registerCasings();

    }

    private static void registerMachines() {
        final MultiTileEntityBlock machine = MultiTileEntityBlock
            .getOrCreate("GregTech", "machine", Material.iron, Block.soundTypeMetal, "wrench", 0, 0, 15, true, true);
        final MultiTileEntityRegistry machineRegistry = new MultiTileEntityRegistry("gt.multitileentity.controllers");
        // Disable for now
        machineRegistry.create(1000, MultiBlock_Macerator.class)
            .name("Large Macerator")
            .category("Multiblock Controller")
            .setBlock(machine)
            .material(Materials.Iron)
            .texture("metalwall")
            .tankCapacity(128000L)
            .inputInventorySize(16)
            .outputInventorySize(16)
            .register();
        machineRegistry.create(0, MultiBlock_CokeOven.class)
            .name("Coke Oven")
            .category("MultiblockController")
            .setBlock(machine)
            .texture("cokeOven")
            .inputInventorySize(1)
            .outputInventorySize(1)
            .register();
    }

    private static void registerCasings() {
        final MultiTileEntityRegistry casingRegistry = new MultiTileEntityRegistry("gt.multitileentity.casings");
        final MultiTileEntityBlock casing = MultiTileEntityBlock
            .getOrCreate("GregTech", "casing", Material.iron, Block.soundTypeMetal, "wrench", 0, 0, 15, true, true);
        casingRegistry.create(CokeOven.getId(), WallShareablePart.class)
            .name("Coke Oven Bricks")
            .category("MultiBlock Casing")
            .setBlock(casing)
            .texture("cokeOven")
            .register();
        casingRegistry.create(18000, BasicCasing.class)
            .name("Test Casing")
            .category("Multiblock Casing")
            .setBlock(casing)
            .material(Materials.Cobalt)
            .texture("metalwall")
            .register();
        casingRegistry.create(20001, InventoryUpgrade.class)
            .name("Inventory Upgrade LV")
            .category("MultiBlock Special Casing")
            .setBlock(casing)
            .material(Materials.SpaceTime)
            .texture("metalwall")
            .upgradeInventorySize(16)
            .tier(1)
            .register();
        casingRegistry.create(20002, InventoryUpgrade.class)
            .name("Inventory Upgrade MV")
            .category("MultiBlock Upgrade Casing")
            .setBlock(casing)
            .material(Materials.Neutronium)
            .texture("metalwall")
            .upgradeInventorySize(24)
            .tier(2)
            .register();
        casingRegistry.create(10000, MotorCasing.class)
            .name("Motor Casing LV")
            .tier(1)
            .category("MultiBlock Functional Casing")
            .setBlock(casing)
            .material(Materials.Arsenic)
            .texture("metalwall")
            .register();
    }
}