// 
// 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.IntegerSchema;
import com.hypixel.hytale.codec.schema.config.NumberSchema;
import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import com.hypixel.hytale.codec.validation.ValidationResults;
import com.hypixel.hytale.logger.HytaleLogger;
import com.hypixel.hytale.codec.validation.Validator;

public class RangeRefValidator<T extends Comparable<T>> implements Validator<T>
{
    private static final HytaleLogger LOGGER;
    private final String minPointer;
    private final String maxPointer;
    private final boolean inclusive;
    
    public RangeRefValidator(final String minPointer, final String maxPointer, final boolean inclusive) {
        this.minPointer = minPointer;
        this.maxPointer = maxPointer;
        this.inclusive = inclusive;
    }
    
    @Override
    public void accept(final T t, final ValidationResults results) {
    }
    
    @Override
    public void updateSchema(final SchemaContext context, final Schema target) {
        if (!(target instanceof NumberSchema) && !(target instanceof IntegerSchema)) {
            RangeRefValidator.LOGGER.at(Level.WARNING).log("Can't handle: " + target.getHytale().getType() + " as a range");
            return;
        }
        if (target instanceof final IntegerSchema i) {
            if (this.minPointer != null) {
                if (this.inclusive) {
                    i.setMinimum(Schema.data(this.minPointer));
                }
                else {
                    i.setExclusiveMinimum(Schema.data(this.minPointer));
                }
            }
            if (this.maxPointer != null) {
                if (this.inclusive) {
                    i.setMaximum(Schema.data(this.maxPointer));
                }
                else {
                    i.setExclusiveMaximum(Schema.data(this.maxPointer));
                }
            }
        }
        else {
            final NumberSchema j = (NumberSchema)target;
            if (this.minPointer != null) {
                if (this.inclusive) {
                    j.setMinimum(Schema.data(this.minPointer));
                }
                else {
                    j.setExclusiveMinimum(Schema.data(this.minPointer));
                }
            }
            if (this.maxPointer != null) {
                if (this.inclusive) {
                    j.setMaximum(Schema.data(this.maxPointer));
                }
                else {
                    j.setExclusiveMaximum(Schema.data(this.maxPointer));
                }
            }
        }
    }
    
    static {
        LOGGER = HytaleLogger.forEnclosingClass();
    }
}
