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

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

import com.hypixel.hytale.server.npc.asset.builder.Builder;
import javax.annotation.Nullable;
import java.util.List;
import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
import com.hypixel.hytale.server.npc.validators.NPCLoadTimeValidationHelper;
import com.hypixel.hytale.server.npc.asset.builder.validators.StringValidator;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
import com.hypixel.hytale.server.npc.corecomponents.audiovisual.ActionPlayAnimation;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
import com.hypixel.hytale.server.npc.asset.builder.holder.StringHolder;
import com.hypixel.hytale.server.npc.animations.NPCAnimationSlot;
import com.hypixel.hytale.server.npc.corecomponents.builders.BuilderActionBase;

public class BuilderActionPlayAnimation extends BuilderActionBase
{
    protected NPCAnimationSlot slot;
    protected final StringHolder animationId;
    
    public BuilderActionPlayAnimation() {
        this.animationId = new StringHolder();
    }
    
    @Override
    public ActionPlayAnimation build(@Nonnull final BuilderSupport builderSupport) {
        return new ActionPlayAnimation(this, builderSupport);
    }
    
    @Nonnull
    @Override
    public String getShortDescription() {
        return "Play an animation";
    }
    
    @Nonnull
    @Override
    public String getLongDescription() {
        return "Play an animation";
    }
    
    @Nonnull
    @Override
    public BuilderDescriptorState getBuilderDescriptorState() {
        return BuilderDescriptorState.Experimental;
    }
    
    @Nonnull
    @Override
    public BuilderActionPlayAnimation readConfig(@Nonnull final JsonElement data) {
        this.requireEnum(data, "Slot", e -> this.slot = e, NPCAnimationSlot.class, BuilderDescriptorState.Stable, "The animation slot to play on", null);
        this.getString(data, "Animation", this.animationId, null, null, BuilderDescriptorState.Stable, "The animation ID to play", null);
        return this;
    }
    
    @Override
    protected void runLoadTimeValidationHelper0(final String configName, @Nonnull final NPCLoadTimeValidationHelper loadTimeValidationHelper, final ExecutionContext context, final List<String> errors) {
        loadTimeValidationHelper.validateAnimation(this.animationId.get(context));
    }
    
    public NPCAnimationSlot getSlot() {
        return this.slot;
    }
    
    @Nullable
    public String getAnimationId(@Nonnull final BuilderSupport support) {
        final String anim = this.animationId.get(support.getExecutionContext());
        return (anim == null || anim.isEmpty()) ? null : anim;
    }
}
