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

package com.hypixel.hytale.builtin.instances.removal;

import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.builtin.instances.config.InstanceWorldConfig;
import java.util.concurrent.CompletableFuture;
import com.hypixel.hytale.server.core.universe.Universe;
import javax.annotation.Nonnull;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.component.system.tick.RunWhenPausedSystem;
import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
import com.hypixel.hytale.component.system.tick.TickingSystem;

public class RemovalSystem extends TickingSystem<ChunkStore> implements RunWhenPausedSystem<ChunkStore>
{
    @Override
    public void tick(final float dt, final int systemIndex, @Nonnull final Store<ChunkStore> store) {
        final InstanceDataResource data = store.getResource(InstanceDataResource.getResourceType());
        if (!data.isRemoving() && shouldRemoveWorld(store)) {
            data.setRemoving(true);
            CompletableFuture.runAsync(() -> Universe.get().removeWorld(store.getExternalData().getWorld().getName()));
        }
    }
    
    public static boolean shouldRemoveWorld(@Nonnull final Store<ChunkStore> store) {
        final World world = store.getExternalData().getWorld();
        final InstanceWorldConfig config = InstanceWorldConfig.get(world.getWorldConfig());
        if (config == null) {
            return false;
        }
        final RemovalCondition[] removalConditions = config.getRemovalConditions();
        if (removalConditions.length == 0) {
            return false;
        }
        boolean shouldRemove = true;
        for (final RemovalCondition cond : removalConditions) {
            shouldRemove &= cond.shouldRemoveWorld(store);
        }
        return shouldRemove;
    }
}
