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

package com.hypixel.hytale.server.npc.asset.builder.holder;

import com.hypixel.hytale.server.npc.asset.builder.BuilderBase;
import com.hypixel.hytale.server.npc.asset.builder.BuilderParameters;
import javax.annotation.Nonnull;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
import com.hypixel.hytale.server.npc.util.expression.ValueType;
import java.util.EnumSet;

public class EnumSetHolder<E extends Enum<E>> extends ArrayHolder
{
    private Class<E> clazz;
    private E[] enumConstants;
    private EnumSet<E> value;
    
    public EnumSetHolder() {
        super(ValueType.STRING_ARRAY);
    }
    
    @Override
    public void validate(final ExecutionContext context) {
        this.get(context);
    }
    
    public void readJSON(@Nonnull final JsonElement requiredJsonElement, final Class<E> clazz, final String name, @Nonnull final BuilderParameters builderParameters) {
        this.clazz = clazz;
        this.enumConstants = clazz.getEnumConstants();
        this.readJSON(requiredJsonElement, 0, Integer.MAX_VALUE, name, builderParameters);
        if (this.isStatic()) {
            this.value = BuilderBase.stringsToEnumSet(this.expression.getStringArray(null), clazz, this.enumConstants, this.getName());
        }
    }
    
    public void readJSON(final JsonElement optionalJsonElement, @Nonnull final EnumSet<E> defaultValue, final Class<E> clazz, final String name, @Nonnull final BuilderParameters builderParameters) {
        this.clazz = clazz;
        this.enumConstants = clazz.getEnumConstants();
        this.readJSON(optionalJsonElement, 0, Integer.MAX_VALUE, BuilderBase.enumSetToStrings(defaultValue), name, builderParameters);
        if (this.isStatic()) {
            this.value = BuilderBase.stringsToEnumSet(this.expression.getStringArray(null), clazz, this.enumConstants, this.getName());
        }
    }
    
    public EnumSet<E> get(final ExecutionContext executionContext) {
        final EnumSet<E> value = this.rawGet(executionContext);
        return value;
    }
    
    public EnumSet<E> rawGet(final ExecutionContext executionContext) {
        if (!this.isStatic()) {
            this.value = BuilderBase.stringsToEnumSet(this.expression.getStringArray(executionContext), this.clazz, this.enumConstants, this.getName());
        }
        return this.value;
    }
}
