package net.mcreator.phayriosisreborn.compat;

import net.minecraft.world.level.LevelAccessor;
import net.mcreator.phayriosisreborn.config.PhayriosisFileConfig;
import net.mcreator.phayriosisreborn.config.PhayriosisPendingWorldSettings;
import net.mcreator.phayriosisreborn.config.PhayriosisWorldSettings;

/** Gates the legacy small meteor feature against the live meteor-event setting. */
public final class SmallMeteorWorldgenGate {
    private SmallMeteorWorldgenGate() {}

    public static boolean canGenerate(LevelAccessor world) {
        try {
            PhayriosisFileConfig.ensureLoaded();

            // Explicit file override is authoritative for servers/modpacks.
            if (PhayriosisFileConfig.overrideExistingWorldSettings) {
                return !PhayriosisFileConfig.meteorEnabled;
            }

            // During integrated Create World generation, the pending draft exists before
            // SavedData has necessarily been consumed. Respect it immediately.
            if (PhayriosisPendingWorldSettings.active) {
                return !PhayriosisPendingWorldSettings.meteorEnabled;
            }

            PhayriosisWorldSettings settings = PhayriosisWorldSettings.get(world);
            if (settings != null && (settings.initialized || settings.worldCreationConfigured)) {
                return !settings.meteorEnabled;
            }

            // Fresh dedicated-server worlds can generate spawn chunks before ServerStartedEvent.
            if (PhayriosisFileConfig.useConfigDefaultsForNewWorlds) {
                return !PhayriosisFileConfig.meteorEnabled;
            }

            return settings == null || !settings.meteorEnabled;
        } catch (Throwable ignored) {
            // Fail safe toward legacy generation rather than breaking chunk generation.
            return true;
        }
    }
}
