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

package com.hypixel.hytale.server.npc.corecomponents.debug.builders;

import com.hypixel.hytale.server.npc.asset.builder.Builder;
import javax.annotation.Nullable;
import com.hypixel.hytale.server.npc.asset.builder.validators.StringArrayValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleArrayValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.asset.ModelExistsValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.AssetValidator;
import java.util.EnumSet;
import com.hypixel.hytale.server.npc.asset.builder.validators.StringValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.IntValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleValidator;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.npc.corecomponents.debug.ActionTest;
import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.asset.builder.holder.StringArrayHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.NumberArrayHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.AssetHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.EnumSetHolder;
import com.hypixel.hytale.server.npc.role.RoleDebugFlags;
import com.hypixel.hytale.server.npc.asset.builder.holder.EnumHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.StringHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.IntHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.FloatHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.DoubleHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.BooleanHolder;
import com.hypixel.hytale.server.npc.corecomponents.builders.BuilderActionBase;

public class BuilderActionTest extends BuilderActionBase
{
    protected final BooleanHolder booleanHolder;
    protected final DoubleHolder doubleHolder;
    protected final FloatHolder floatHolder;
    protected final IntHolder intHolder;
    protected final StringHolder stringHolder;
    protected final EnumHolder<RoleDebugFlags> enumHolder;
    protected final EnumSetHolder<RoleDebugFlags> enumSetHolder;
    protected final AssetHolder assetHolder;
    protected final NumberArrayHolder numberArrayHolder;
    protected final StringArrayHolder stringArrayHolder;
    
    public BuilderActionTest() {
        this.booleanHolder = new BooleanHolder();
        this.doubleHolder = new DoubleHolder();
        this.floatHolder = new FloatHolder();
        this.intHolder = new IntHolder();
        this.stringHolder = new StringHolder();
        this.enumHolder = new EnumHolder<RoleDebugFlags>();
        this.enumSetHolder = new EnumSetHolder<RoleDebugFlags>();
        this.assetHolder = new AssetHolder();
        this.numberArrayHolder = new NumberArrayHolder();
        this.stringArrayHolder = new StringArrayHolder();
    }
    
    @Nonnull
    @Override
    public String getShortDescription() {
        return "Test action to exercise attribute evaluation (DO NOT USE)";
    }
    
    @Nonnull
    @Override
    public String getLongDescription() {
        return this.getShortDescription();
    }
    
    @Nonnull
    @Override
    public BuilderDescriptorState getBuilderDescriptorState() {
        return BuilderDescriptorState.Experimental;
    }
    
    @Nonnull
    @Override
    public ActionTest build(@Nonnull final BuilderSupport builderSupport) {
        return new ActionTest(this, builderSupport);
    }
    
    @Nonnull
    @Override
    public BuilderActionTest readConfig(@Nonnull final JsonElement data) {
        this.getBoolean(data, "Boolean", this.booleanHolder, true, BuilderDescriptorState.Deprecated, "Boolean True", null);
        this.getDouble(data, "Double", this.doubleHolder, 0.0, null, BuilderDescriptorState.Deprecated, "Double 0", null);
        this.getFloat(data, "Float", this.floatHolder, 0.0, null, BuilderDescriptorState.Deprecated, "Float 0", null);
        this.getInt(data, "Int", this.intHolder, 0, null, BuilderDescriptorState.Deprecated, "Int 0", null);
        this.getString(data, "String", this.stringHolder, "Test", null, BuilderDescriptorState.Deprecated, "String Test", null);
        this.getEnum(data, "Enum", this.enumHolder, RoleDebugFlags.class, RoleDebugFlags.Collisions, BuilderDescriptorState.Deprecated, "Enum RoleDebugFlags Collisions", null);
        this.getEnumSet(data, "EnumSet", this.enumSetHolder, RoleDebugFlags.class, (EnumSet<RoleDebugFlags>)EnumSet.of((E)RoleDebugFlags.Collisions, (E)RoleDebugFlags.Flock), BuilderDescriptorState.Deprecated, "EnumSet Collisions Flock", null);
        this.getAsset(data, "Asset", this.assetHolder, "Sheep", ModelExistsValidator.withConfig(EnumSet.of(AssetValidator.Config.MATCHER)), BuilderDescriptorState.Deprecated, "Asset Sheep", null);
        this.getDoubleArray(data, "DoubleArray", this.numberArrayHolder, new double[] { 1.0, 2.0 }, 0, 10, null, BuilderDescriptorState.Deprecated, "DoubleArray [1,2] 0-10", null);
        this.getStringArray(data, "StringArray", this.stringArrayHolder, new String[] { "a", "b" }, 0, 10, null, BuilderDescriptorState.Deprecated, "StringArray [a,b] 0-10", null);
        return this;
    }
    
    public boolean getBoolean(@Nonnull final BuilderSupport support) {
        return this.booleanHolder.get(support.getExecutionContext());
    }
    
    public double getDouble(@Nonnull final BuilderSupport support) {
        return this.doubleHolder.get(support.getExecutionContext());
    }
    
    public float getFloat(@Nonnull final BuilderSupport support) {
        return this.floatHolder.get(support.getExecutionContext());
    }
    
    public int getInt(@Nonnull final BuilderSupport support) {
        return this.intHolder.get(support.getExecutionContext());
    }
    
    public String getString(@Nonnull final BuilderSupport support) {
        return this.stringHolder.get(support.getExecutionContext());
    }
    
    public RoleDebugFlags getEnum(@Nonnull final BuilderSupport support) {
        return this.enumHolder.get(support.getExecutionContext());
    }
    
    public EnumSet<RoleDebugFlags> getEnumSet(@Nonnull final BuilderSupport support) {
        return this.enumSetHolder.get(support.getExecutionContext());
    }
    
    public String getAsset(@Nonnull final BuilderSupport support) {
        return this.assetHolder.get(support.getExecutionContext());
    }
    
    public double[] getNumberArray(@Nonnull final BuilderSupport support) {
        return this.numberArrayHolder.get(support.getExecutionContext());
    }
    
    @Nullable
    public String[] getStringArray(@Nonnull final BuilderSupport support) {
        return this.stringArrayHolder.get(support.getExecutionContext());
    }
}
