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

package com.hypixel.hytale.server.worldgen.prefab;

import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.IPrefabBuffer;
import com.hypixel.hytale.server.core.prefab.selection.buffer.PrefabBufferUtil;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import com.hypixel.hytale.server.core.prefab.selection.buffer.impl.PrefabBuffer;
import com.hypixel.hytale.server.worldgen.loader.WorldGenPrefabSupplier;
import java.util.Map;

public class PrefabLoadingCache
{
    private final Map<WorldGenPrefabSupplier, PrefabBuffer> cache;
    private final Function<WorldGenPrefabSupplier, PrefabBuffer> loader;
    
    public PrefabLoadingCache() {
        this.cache = new ConcurrentHashMap<WorldGenPrefabSupplier, PrefabBuffer>();
        this.loader = (Function<WorldGenPrefabSupplier, PrefabBuffer>)(p -> PrefabBufferUtil.loadBuffer(p.getPath()));
    }
    
    @Nonnull
    public IPrefabBuffer getPrefabAccessor(final WorldGenPrefabSupplier prefabSupplier) {
        return this.cache.computeIfAbsent(prefabSupplier, this.loader).newAccess();
    }
    
    public void clear() {
        this.cache.values().removeIf(buffer -> {
            buffer.release();
            return true;
        });
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "PrefabLoadingCache{cache=" + String.valueOf(this.cache);
    }
}
