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

package com.hypixel.hytale.server.spawning.managers;

import com.hypixel.hytale.server.spawning.wrappers.SpawnWrapper;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import javax.annotation.Nullable;
import it.unimi.dsi.fastutil.ints.IntSet;
import javax.annotation.Nonnull;
import java.util.List;
import com.hypixel.fastutil.ints.Int2ObjectConcurrentHashMap;
import com.hypixel.hytale.server.spawning.assets.spawns.config.BeaconNPCSpawn;
import com.hypixel.hytale.server.spawning.wrappers.BeaconSpawnWrapper;

public class BeaconSpawnManager extends SpawnManager<BeaconSpawnWrapper, BeaconNPCSpawn>
{
    @Nonnull
    private final Int2ObjectConcurrentHashMap<List<BeaconSpawnWrapper>> wrappersByEnvironment;
    
    public BeaconSpawnManager() {
        this.wrappersByEnvironment = new Int2ObjectConcurrentHashMap<List<BeaconSpawnWrapper>>();
    }
    
    @Nullable
    @Override
    public BeaconSpawnWrapper removeSpawnWrapper(final int spawnConfigurationIndex) {
        final BeaconSpawnWrapper wrapper = super.removeSpawnWrapper(spawnConfigurationIndex);
        if (wrapper == null) {
            return null;
        }
        final IntSet environmentIds = wrapper.getSpawn().getEnvironmentIds();
        environmentIds.forEach(environment -> this.wrappersByEnvironment.get(environment).remove(wrapper));
        return wrapper;
    }
    
    @Override
    public boolean addSpawnWrapper(@Nonnull final BeaconSpawnWrapper spawnWrapper) {
        final IntSet environmentIds = spawnWrapper.getSpawn().getEnvironmentIds();
        environmentIds.forEach(environment -> this.wrappersByEnvironment.computeIfAbsent(environment, key -> new ObjectArrayList()).add(spawnWrapper));
        super.addSpawnWrapper(spawnWrapper);
        return true;
    }
    
    public List<BeaconSpawnWrapper> getBeaconSpawns(final int environment) {
        return this.wrappersByEnvironment.get(environment);
    }
}
