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

package com.hypixel.hytale.server.core.universe.world.events;

import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.common.util.FormatUtil;
import java.util.logging.Level;
import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
import com.hypixel.hytale.component.Holder;
import com.hypixel.hytale.event.IProcessedEvent;

public class ChunkPreLoadProcessEvent extends ChunkEvent implements IProcessedEvent
{
    private final boolean newlyGenerated;
    private long lastDispatchNanos;
    private boolean didLog;
    @Nonnull
    private final Holder<ChunkStore> holder;
    
    public ChunkPreLoadProcessEvent(@Nonnull final Holder<ChunkStore> holder, @Nonnull final WorldChunk chunk, final boolean newlyGenerated, final long lastDispatchNanos) {
        super(chunk);
        this.newlyGenerated = newlyGenerated;
        this.lastDispatchNanos = lastDispatchNanos;
        this.holder = holder;
    }
    
    public boolean isNewlyGenerated() {
        return this.newlyGenerated;
    }
    
    public Holder<ChunkStore> getHolder() {
        return this.holder;
    }
    
    @Override
    public void processEvent(@Nonnull final String hookName) {
        final long end = System.nanoTime();
        final long diff = end - this.lastDispatchNanos;
        this.lastDispatchNanos = end;
        if (diff > this.getChunk().getWorld().getTickStepNanos()) {
            final World world = this.getChunk().getWorld();
            if (world.consumeGCHasRun()) {
                world.getLogger().at(Level.SEVERE).log(String.format("Took too long to run pre-load process hook for chunk: %s > TICK_STEP, Has GC Run: true, %%s, Hook: %%s", FormatUtil.nanosToString(diff)), this.getChunk(), hookName);
            }
            else {
                world.getLogger().at(Level.SEVERE).log(String.format("Took too long to run pre-load process hook for chunk: %s > TICK_STEP, %%s, Hook: %%s", FormatUtil.nanosToString(diff)), this.getChunk(), hookName);
            }
            this.didLog = true;
        }
    }
    
    public boolean didLog() {
        return this.didLog;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "ChunkPreLoadProcessEvent{newlyGenerated=" + this.newlyGenerated + ", lastDispatchNanos=" + this.lastDispatchNanos + ", didLog=" + this.didLog + "} " + super.toString();
    }
}
