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

package com.hypixel.hytale.codec.validation.validator;

import java.util.logging.Level;
import com.hypixel.hytale.codec.schema.config.NumberSchema;
import com.hypixel.hytale.codec.schema.config.IntegerSchema;
import com.hypixel.hytale.codec.schema.config.StringSchema;
import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import com.hypixel.hytale.codec.validation.ValidationResults;
import javax.annotation.Nullable;
import javax.annotation.Nonnull;
import com.hypixel.hytale.logger.HytaleLogger;
import com.hypixel.hytale.codec.validation.Validator;

public class EqualValidator<T extends Comparable<T>> implements Validator<T>
{
    private static final HytaleLogger LOGGER;
    @Nonnull
    private final T value;
    
    public EqualValidator(@Nonnull final T value) {
        this.value = value;
    }
    
    @Override
    public void accept(@Nullable final T o, @Nonnull final ValidationResults results) {
        if (o != null && this.value.compareTo(o) != 0) {
            results.fail("Provided value must be equal to " + String.valueOf(this.value));
        }
    }
    
    @Override
    public void updateSchema(final SchemaContext context, @Nonnull final Schema target) {
        if (target.getAllOf() != null) {
            throw new IllegalArgumentException();
        }
        if (target instanceof StringSchema && this.value instanceof String) {
            ((StringSchema)target).setConst((String)this.value);
        }
        else if (target instanceof IntegerSchema && this.value instanceof Number) {
            ((IntegerSchema)target).setConst(((Number)this.value).intValue());
        }
        else if (target instanceof NumberSchema && this.value instanceof Number) {
            ((NumberSchema)target).setConst(((Number)this.value).doubleValue());
        }
        else {
            EqualValidator.LOGGER.at(Level.WARNING).log("Cannot compare " + String.valueOf(this.value.getClass()) + " with " + String.valueOf(target.getClass()));
        }
    }
    
    static {
        LOGGER = HytaleLogger.forEnclosingClass();
    }
}
