package net.mcreator.phayriosisreborn.meteor;

import java.util.UUID;
import net.minecraftforge.common.world.ForgeChunkManager;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;

/**
 * Startup validation for temporary meteor Forge chunk tickets.
 *
 * If a world was saved during a live meteor, activeMeteor remains true and its
 * UUID tickets are retained so the meteor can resume. If the world was saved in
 * the short post-impact release window, activeMeteor is already false, so any
 * persisted meteor UUID tickets are stale and are removed before reinstatement.
 */
@Mod.EventBusSubscriber(modid = "phayriosisreborn", bus = Mod.EventBusSubscriber.Bus.MOD)
public final class PhayriosisMeteorChunkTicketValidation {
    private static final String MOD_ID = "phayriosisreborn";

    private PhayriosisMeteorChunkTicketValidation() {}

    @SubscribeEvent
    public static void onCommonSetup(FMLCommonSetupEvent event) {
        event.enqueueWork(() -> ForgeChunkManager.setForcedChunkLoadingCallback(MOD_ID, (level, helper) -> {
            PhayriosisMeteorEventData state = PhayriosisMeteorEventData.get(level);
            if (state != null && state.activeMeteor) {
                return;
            }
            int removed = 0;
            for (UUID owner : helper.getEntityTickets().keySet()) {
                helper.removeAllTickets(owner);
                removed++;
            }
            if (removed > 0) {
                System.out.println("[Phayriosis Meteor] removed " + removed + " stale meteor chunk-ticket owner(s) during world load");
            }
        }));
    }
}
