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

package com.hypixel.hytale.server.flock.corecomponents.builders;

import com.hypixel.hytale.server.npc.asset.builder.Builder;
import com.hypixel.hytale.server.npc.asset.builder.Feature;
import com.hypixel.hytale.server.npc.asset.builder.validators.StringValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.StringNotEmptyValidator;
import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.flock.corecomponents.ActionFlockSetTarget;
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.corecomponents.builders.BuilderActionBase;

public class BuilderActionFlockSetTarget extends BuilderActionBase
{
    protected boolean clear;
    protected final StringHolder targetSlot;
    
    public BuilderActionFlockSetTarget() {
        this.targetSlot = new StringHolder();
    }
    
    @Nonnull
    @Override
    public ActionFlockSetTarget build(@Nonnull final BuilderSupport builderSupport) {
        return new ActionFlockSetTarget(this, builderSupport);
    }
    
    @Nonnull
    @Override
    public BuilderActionFlockSetTarget readConfig(@Nonnull final JsonElement data) {
        this.getBoolean(data, "Clear", v -> this.clear = v, false, BuilderDescriptorState.Stable, "Clear locked target if true else set.", "If true, clear locked target. If false, set to current target.");
        this.getString(data, "TargetSlot", this.targetSlot, "LockedTarget", StringNotEmptyValidator.get(), BuilderDescriptorState.Stable, "The target slot to use", null);
        this.requireFeature(Feature.LiveEntity);
        return this;
    }
    
    @Nonnull
    @Override
    public String getShortDescription() {
        return "Set or clear locked target for flock.";
    }
    
    @Nonnull
    @Override
    public String getLongDescription() {
        return "Sets or clears the locked target for the flock the NPC is member of. If Clear flag is true, the locked target is cleared otherwise it is set to the the target.The flock leader is explicitly excluded from this operation.";
    }
    
    @Nonnull
    @Override
    public BuilderDescriptorState getBuilderDescriptorState() {
        return BuilderDescriptorState.Stable;
    }
    
    public boolean isClear() {
        return this.clear;
    }
    
    public String getTargetSlot(@Nonnull final BuilderSupport support) {
        return this.targetSlot.get(support.getExecutionContext());
    }
}
