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

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

import com.hypixel.hytale.logger.HytaleLogger;
import com.hypixel.hytale.server.core.util.BsonUtil;
import com.hypixel.hytale.codec.ExtraInfo;
import javax.annotation.Nonnull;
import com.google.gson.JsonElement;
import javax.annotation.Nullable;
import com.hypixel.hytale.codec.validation.Validator;
import com.hypixel.hytale.codec.Codec;

public class BuilderCodecObjectHelper<T>
{
    protected final Codec<T> codec;
    protected final Class<?> classType;
    protected final Validator<T> validator;
    @Nullable
    protected T value;
    
    public BuilderCodecObjectHelper(final Class<?> classType, final Codec<T> codec, final Validator<T> validator) {
        this.classType = classType;
        this.codec = codec;
        this.validator = validator;
    }
    
    @Nullable
    public T build() {
        return this.value;
    }
    
    public void readConfig(@Nonnull final JsonElement data, @Nonnull final ExtraInfo extraInfo) {
        this.value = this.codec.decode(BsonUtil.translateJsonToBson(data), extraInfo);
        if (this.validator != null) {
            this.validator.accept(this.value, extraInfo.getValidationResults());
        }
        extraInfo.getValidationResults()._processValidationResults();
        extraInfo.getValidationResults().logOrThrowValidatorExceptions(HytaleLogger.getLogger());
    }
    
    public boolean hasValue() {
        return this.value != null;
    }
    
    public Class<?> getClassType() {
        return this.classType;
    }
}
