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

package com.hypixel.hytale.server.core.ui;

import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import org.bson.BsonString;
import org.bson.BsonDocument;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.ExtraInfo;
import org.bson.BsonValue;
import com.hypixel.hytale.codec.Codec;

public class ValueCodec<T> implements Codec<Value<T>>
{
    public static final ValueCodec<Object> REFERENCE_ONLY;
    public static final ValueCodec<String> STRING;
    public static final ValueCodec<LocalizableString> LOCALIZABLE_STRING;
    public static final ValueCodec<Integer> INTEGER;
    public static final ValueCodec<PatchStyle> PATCH_STYLE;
    protected Codec<T> codec;
    
    ValueCodec(final Codec<T> codec) {
        this.codec = codec;
    }
    
    @Override
    public Value<T> decode(final BsonValue bsonValue, final ExtraInfo extraInfo) {
        throw new UnsupportedOperationException();
    }
    
    @Override
    public BsonValue encode(@Nonnull final Value<T> r, final ExtraInfo extraInfo) {
        if (r.getValue() != null) {
            return this.codec.encode(r.getValue(), extraInfo);
        }
        return new BsonDocument().append("$Document", new BsonString(r.getDocumentPath())).append("@Value", new BsonString(r.getValueName()));
    }
    
    @Nonnull
    @Override
    public Schema toSchema(@Nonnull final SchemaContext context) {
        return this.codec.toSchema(context);
    }
    
    static {
        REFERENCE_ONLY = new ValueCodec<Object>(null);
        STRING = new ValueCodec<String>(Codec.STRING);
        LOCALIZABLE_STRING = new ValueCodec<LocalizableString>(LocalizableString.CODEC);
        INTEGER = new ValueCodec<Integer>(Codec.INTEGER);
        PATCH_STYLE = new ValueCodec<PatchStyle>(PatchStyle.CODEC);
    }
}
