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

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

import com.hypixel.hytale.codec.schema.config.StringSchema;
import com.hypixel.hytale.codec.schema.config.ObjectSchema;
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.Nonnull;
import java.util.Map;
import com.hypixel.hytale.codec.validation.Validator;

public class RequiredMapKeysValidator<T> implements Validator<Map<T, ?>>
{
    private final T[] array;
    
    public RequiredMapKeysValidator(final T[] array) {
        this.array = array;
    }
    
    @Override
    public void accept(@Nonnull final Map<T, ?> map, @Nonnull final ValidationResults results) {
        for (int i = 0; i < this.array.length; ++i) {
            final T obj = this.array[i];
            if (!map.containsKey(obj)) {
                results.fail(String.format("Key not found! %s", obj));
            }
        }
    }
    
    @Override
    public void updateSchema(final SchemaContext context, final Schema target) {
        final ObjectSchema obj = (ObjectSchema)target;
        final StringSchema keys = (obj.getPropertyNames() != null) ? obj.getPropertyNames() : new StringSchema();
        final String[] keyValues = new String[this.array.length];
        for (int i = 0; i < this.array.length; ++i) {
            keyValues[i] = this.array[i].toString();
        }
        keys.setEnum(keyValues);
        obj.setPropertyNames(keys);
    }
}
