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

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

import com.hypixel.hytale.codec.schema.config.StringSchema;
import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import org.bson.BsonString;
import com.hypixel.hytale.codec.ExtraInfo;
import org.bson.BsonValue;
import com.hypixel.hytale.codec.codecs.map.MapCodec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.Codec;
import javax.annotation.Nonnull;
import java.util.Map;
import com.hypixel.hytale.codec.builder.BuilderCodec;

public class LocalizableString
{
    public static final LocalizableStringCodec CODEC;
    public static final BuilderCodec<LocalizableString> MESSAGE_OBJECT_CODEC;
    private String stringValue;
    private String messageId;
    private Map<String, String> messageParams;
    
    @Nonnull
    public static LocalizableString fromString(final String str) {
        final LocalizableString instance = new LocalizableString();
        instance.stringValue = str;
        return instance;
    }
    
    @Nonnull
    public static LocalizableString fromMessageId(final String messageId) {
        return fromMessageId(messageId, null);
    }
    
    @Nonnull
    public static LocalizableString fromMessageId(final String messageId, final Map<String, String> params) {
        final LocalizableString instance = new LocalizableString();
        instance.messageId = messageId;
        instance.messageParams = params;
        return instance;
    }
    
    static {
        CODEC = new LocalizableStringCodec();
        MESSAGE_OBJECT_CODEC = BuilderCodec.builder(LocalizableString.class, LocalizableString::new).addField(new KeyedCodec<String>("MessageId", Codec.STRING), (p, t) -> p.messageId = t, p -> p.messageId).addField(new KeyedCodec("MessageParams", MapCodec.STRING_HASH_MAP_CODEC), (p, t) -> p.messageParams = t, p -> p.messageParams).build();
    }
    
    public static class LocalizableStringCodec implements Codec<LocalizableString>
    {
        @Override
        public LocalizableString decode(final BsonValue bsonValue, @Nonnull final ExtraInfo extraInfo) {
            if (bsonValue instanceof BsonString) {
                return LocalizableString.fromString(bsonValue.asString().getValue());
            }
            return LocalizableString.MESSAGE_OBJECT_CODEC.decode(bsonValue, extraInfo);
        }
        
        @Nonnull
        @Override
        public BsonValue encode(@Nonnull final LocalizableString t, @Nonnull final ExtraInfo extraInfo) {
            if (t.stringValue != null) {
                return new BsonString(t.stringValue);
            }
            return LocalizableString.MESSAGE_OBJECT_CODEC.encode(t, extraInfo);
        }
        
        @Nonnull
        @Override
        public Schema toSchema(@Nonnull final SchemaContext context) {
            return Schema.anyOf(new StringSchema(), LocalizableString.MESSAGE_OBJECT_CODEC.toSchema(context));
        }
    }
}
