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

package com.hypixel.hytale.builtin.portals.systems.voidevent;

import com.hypixel.hytale.component.Holder;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.builtin.portals.components.voidevent.config.VoidEventConfig;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.component.AddReason;
import com.hypixel.hytale.builtin.portals.components.voidevent.VoidEvent;
import com.hypixel.hytale.component.RemoveReason;
import com.hypixel.hytale.builtin.portals.resources.PortalWorld;
import javax.annotation.Nonnull;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.system.DelayedSystem;

public class StartVoidEventInFragmentSystem extends DelayedSystem<EntityStore>
{
    public StartVoidEventInFragmentSystem() {
        super(1.0f);
    }
    
    @Override
    public void delayedTick(final float dt, final int systemIndex, @Nonnull final Store<EntityStore> store) {
        final PortalWorld portalWorld = store.getResource(PortalWorld.getResourceType());
        if (!portalWorld.exists()) {
            return;
        }
        if (!portalWorld.getPortalType().isVoidInvasionEnabled()) {
            return;
        }
        final World world = store.getExternalData().getWorld();
        final VoidEventConfig voidEventConfig = portalWorld.getVoidEventConfig();
        final int timeLimitSeconds = portalWorld.getTimeLimitSeconds();
        final int shouldStartAfter = voidEventConfig.getShouldStartAfterSeconds(timeLimitSeconds);
        final int elapsedSeconds = (int)Math.ceil(portalWorld.getElapsedSeconds(world));
        final Ref<EntityStore> voidEventRef = portalWorld.getVoidEventRef();
        final boolean exists = voidEventRef != null;
        final boolean shouldExist = elapsedSeconds >= shouldStartAfter;
        if (exists && !shouldExist) {
            store.removeEntity(voidEventRef, RemoveReason.REMOVE);
        }
        if (shouldExist && !exists) {
            final Holder<EntityStore> holder = EntityStore.REGISTRY.newHolder();
            holder.addComponent(VoidEvent.getComponentType(), new VoidEvent());
            final Ref<EntityStore> spawnedEventRef = store.addEntity(holder, AddReason.SPAWN);
            portalWorld.setVoidEventRef(spawnedEventRef);
        }
    }
}
