package classes

import classes.gthpTextures

import gregtech.api.metatileentity.MetaTileEntity
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity
import gregtech.api.metatileentity.multiblock.IMultiblockPart
import gregtech.api.metatileentity.multiblock.RecipeMapSteamMultiblockController 
import gregtech.api.pattern.BlockPattern
import gregtech.api.pattern.FactoryBlockPattern
import gregtech.api.recipes.RecipeMap
import gregtech.api.recipes.builders.SimpleRecipeBuilder
import gregtech.client.renderer.ICubeRenderer

import gregtech.client.renderer.texture.Textures
import gregtech.common.blocks.BlockGlassCasing
import gregtech.common.blocks.BlockMachineCasing
import gregtech.common.blocks.BlockSteamCasing
import gregtech.common.blocks.BlockComputerCasing
import gregtech.common.blocks.BlockMetalCasing
import gregtech.common.blocks.BlockBoilerCasing
import gregtech.common.blocks.MetaBlocks
import gregtech.common.blocks.BlockFrame

import net.minecraft.init.Blocks
import net.minecraft.util.ResourceLocation

import gregtech.api.pattern.TraceabilityPredicate
import gregtech.api.unification.material.Materials

import gregtech.api.capability.impl.SteamMultiWorkable

import gregtech.client.renderer.texture.cube.OrientedOverlayRenderer
import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer

import net.minecraftforge.fml.relauncher.Side
import net.minecraftforge.fml.relauncher.SideOnly


public class MetaTileEntityPlantGrinder extends RecipeMapSteamMultiblockController {

    private static final RecipeMap<SimpleRecipeBuilder> PLANT_GRINDER_RECIPES = new RecipeMap<>("plant_grinder", 4, 4, 1, 1, new SimpleRecipeBuilder(), false)


    public MetaTileEntityPlantGrinder(ResourceLocation metaTileEntityId) {
        super(metaTileEntityId, PLANT_GRINDER_RECIPES, CONVERSION_RATE)
        this.recipeMapWorkable = new SteamMultiWorkable(this, CONVERSION_RATE);
    }

    @Override
    public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) {
        return new MetaTileEntityPlantGrinder(metaTileEntityId)
    }

    @Override
    protected BlockPattern createStructurePattern() {
        return FactoryBlockPattern.start()
                .aisle("FXXXF","F X F","F   F","FFFFF")
                .aisle("XCCCX"," CCC "," CCC ","F   F")
                .aisle("XCCCX"," C#C "," CCC ","F   F")
                .aisle("XCCCX"," CCC "," CCC ","F   F")
                .aisle("FXSXF","F X F","F   F","FFFFF")
                .where('S' as char, selfPredicate())
                .where('F' as char, RecipeMapSteamMultiblockController.frames(Materials.TreatedWood))
                .where('X' as char, states(MetaBlocks.METAL_CASING.getState(BlockMetalCasing.MetalCasingType.BRONZE_BRICKS)).setMinGlobalLimited(10).or(autoAbilities(true, false, true, true, false)))
                .where('C' as char, states(MetaBlocks.STEAM_CASING.getState(BlockSteamCasing.SteamCasingType.WOOD_WALL)))
                .where('#' as char, air())
                .where(' ' as char, TraceabilityPredicate.ANY)
                .build()
    }

    public boolean hasMaintenanceMechanics() {
        return false;
    }
    @Override
    public ICubeRenderer getBaseTexture(IMultiblockPart sourcePart) {
        return Textures.BRONZE_PLATED_BRICKS
    }
    @Override
    protected ICubeRenderer getFrontOverlay() {
        return Textures.VACUUM_FREEZER_OVERLAY
    }
}