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

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

import com.hypixel.hytale.codec.schema.config.NumberSchema;
import com.hypixel.hytale.codec.schema.config.StringSchema;
import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import javax.annotation.Nonnull;
import org.bson.BsonString;
import com.hypixel.hytale.codec.ExtraInfo;
import org.bson.BsonValue;
import java.util.regex.Pattern;
import com.hypixel.hytale.common.tuple.BoolDoublePair;
import com.hypixel.hytale.codec.Codec;

public class BoolDoublePairCodec implements Codec<BoolDoublePair>
{
    private static final Pattern PATTERN;
    
    @Nonnull
    @Override
    public BoolDoublePair decode(final BsonValue bsonValue, final ExtraInfo extraInfo) {
        if (!(bsonValue instanceof BsonString)) {
            return BoolDoublePair.of(false, bsonValue.asDouble().getValue());
        }
        final String str = bsonValue.asString().getValue();
        if (str.charAt(0) != '~') {
            return BoolDoublePair.of(false, Double.parseDouble(str));
        }
        if (str.length() == 1) {
            return BoolDoublePair.of(true, 0.0);
        }
        return BoolDoublePair.of(true, Double.parseDouble(str.substring(1)));
    }
    
    @Nonnull
    @Override
    public BsonValue encode(@Nonnull final BoolDoublePair pair, final ExtraInfo extraInfo) {
        return new BsonString((pair.getLeft() ? "~" : "") + pair.getRight());
    }
    
    @Nonnull
    @Override
    public Schema toSchema(@Nonnull final SchemaContext context) {
        final StringSchema s = new StringSchema();
        s.setPattern(BoolDoublePairCodec.PATTERN);
        return Schema.anyOf(new NumberSchema(), s);
    }
    
    static {
        PATTERN = Pattern.compile("~?[0-9]*");
    }
}
