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

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

import com.hypixel.hytale.codec.schema.config.ArraySchema;
import com.hypixel.hytale.codec.schema.config.Schema;
import com.hypixel.hytale.codec.schema.SchemaContext;
import java.util.Objects;
import com.hypixel.hytale.codec.validation.ValidationResults;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.validation.Validator;

public class UniqueInArrayValidator<T> implements Validator<T[]>
{
    public static final UniqueInArrayValidator<?> INSTANCE;
    
    private UniqueInArrayValidator() {
    }
    
    @Override
    public void accept(@Nonnull final T[] arr, @Nonnull final ValidationResults results) {
        for (int i = 0; i < arr.length; ++i) {
            final T obj = arr[i];
            for (int j = i + 1; j < arr.length; ++j) {
                final T other = arr[j];
                if (Objects.equals(obj, other)) {
                    results.fail(String.format("The two objects at index %s and %s are the same but must be unique! %s == %s", i, j, obj, other));
                }
            }
        }
    }
    
    @Override
    public void updateSchema(final SchemaContext context, @Nonnull final Schema target) {
        ((ArraySchema)target).setUniqueItems(true);
    }
    
    static {
        INSTANCE = new UniqueInArrayValidator<Object>();
    }
}
