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

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

import org.bson.BsonValue;
import org.bson.BsonArray;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import org.bson.BsonString;
import javax.annotation.Nullable;
import javax.annotation.Nonnull;
import java.util.List;
import org.bson.BsonDocument;
import com.hypixel.hytale.codec.schema.SchemaContext;
import com.hypixel.hytale.codec.schema.config.Schema;
import java.util.Map;
import com.hypixel.hytale.event.IEvent;

public class GenerateSchemaEvent implements IEvent<Void>
{
    protected final Map<String, Schema> schemas;
    protected final SchemaContext context;
    protected final BsonDocument vsCodeConfig;
    
    public GenerateSchemaEvent(final Map<String, Schema> schemas, final SchemaContext context, final BsonDocument vsCodeConfig) {
        this.schemas = schemas;
        this.context = context;
        this.vsCodeConfig = vsCodeConfig;
    }
    
    public SchemaContext getContext() {
        return this.context;
    }
    
    public BsonDocument getVsCodeConfig() {
        return this.vsCodeConfig;
    }
    
    public void addSchemaLink(final String name, @Nonnull final List<String> paths, @Nullable final String extension) {
        final BsonDocument config = new BsonDocument();
        config.put("fileMatch", new BsonArray((List<? extends BsonValue>)paths.stream().map(v -> new BsonString("/Server/" + v)).collect((Collector<? super Object, ?, List<? super Object>>)Collectors.toList())));
        config.put("url", new BsonString("./Schema/" + name + ".json"));
        this.vsCodeConfig.getArray("json.schemas").add(config);
        if (extension != null && !extension.equals(".json")) {
            this.vsCodeConfig.getDocument("files.associations").put("*" + extension, (BsonValue)new BsonString("json"));
        }
    }
    
    public void addSchema(final String fileName, final Schema schema) {
        this.schemas.put(fileName, schema);
    }
}
