// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.buildertools.utils;

import javax.annotation.Nullable;
import java.util.Map;
import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.PlaceFluidInteraction;
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
import com.hypixel.hytale.protocol.InteractionType;
import com.hypixel.hytale.server.core.asset.type.item.config.Item;
import javax.annotation.Nonnull;

public final class FluidPatternHelper
{
    private FluidPatternHelper() {
    }
    
    @Nullable
    public static FluidInfo getFluidInfo(@Nonnull final String itemKey) {
        final Item item = Item.getAssetMap().getAsset(itemKey);
        if (item == null) {
            return null;
        }
        final Map<InteractionType, String> interactions = item.getInteractions();
        final String secondaryRootId = interactions.get(InteractionType.Secondary);
        if (secondaryRootId == null) {
            return null;
        }
        final RootInteraction rootInteraction = RootInteraction.getAssetMap().getAsset(secondaryRootId);
        if (rootInteraction == null) {
            return null;
        }
        for (final String interactionId : rootInteraction.getInteractionIds()) {
            final Interaction interaction = Interaction.getAssetMap().getAsset(interactionId);
            if (interaction instanceof final PlaceFluidInteraction placeFluidInteraction) {
                final String fluidKey = placeFluidInteraction.getFluidKey();
                if (fluidKey != null) {
                    final int fluidId = Fluid.getAssetMap().getIndex(fluidKey);
                    if (fluidId >= 0) {
                        final Fluid fluid = Fluid.getAssetMap().getAsset(fluidId);
                        final byte maxLevel = (byte)((fluid != null) ? fluid.getMaxFluidLevel() : 8);
                        return new FluidInfo(fluidId, maxLevel);
                    }
                }
            }
        }
        return null;
    }
    
    public static boolean isFluidItem(@Nonnull final String itemKey) {
        return getFluidInfo(itemKey) != null;
    }
    
    @Nullable
    public static FluidInfo getFluidInfoFromBlockType(@Nonnull final String blockTypeKey) {
        return getFluidInfo(blockTypeKey);
    }
    
    record FluidInfo(int fluidId, byte fluidLevel) {}
}
