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

package com.hypixel.hytale.builtin.adventure.teleporter.util;

import javax.annotation.Nonnull;
import java.util.Iterator;
import com.hypixel.hytale.builtin.teleport.Warp;
import com.hypixel.hytale.builtin.teleport.TeleportPlugin;
import java.util.HashSet;
import java.util.Set;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.server.core.asset.type.wordlist.WordList;
import com.hypixel.hytale.builtin.adventure.teleporter.component.Teleporter;
import java.util.Random;
import com.hypixel.hytale.server.core.modules.block.BlockModule;
import javax.annotation.Nullable;
import com.hypixel.hytale.server.core.modules.i18n.I18nModule;
import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
import com.hypixel.hytale.component.Ref;

public final class CannedWarpNames
{
    private CannedWarpNames() {
    }
    
    @Nullable
    public static String generateCannedWarpName(final Ref<ChunkStore> blockRef, final String language) {
        final String translationKey = generateCannedWarpNameKey(blockRef, language);
        if (translationKey == null) {
            return null;
        }
        return I18nModule.get().getMessage(language, translationKey);
    }
    
    @Nullable
    public static String generateCannedWarpNameKey(final Ref<ChunkStore> blockRef, final String language) {
        final Store<ChunkStore> store = blockRef.getStore();
        final World world = store.getExternalData().getWorld();
        final BlockModule.BlockStateInfo blockStateInfo = store.getComponent(blockRef, BlockModule.BlockStateInfo.getComponentType());
        final Random random = (blockStateInfo == null) ? new Random() : new Random(blockStateInfo.getIndex());
        final Teleporter teleporter = store.getComponent(blockRef, Teleporter.getComponentType());
        final String wordListKey = (teleporter == null) ? null : teleporter.getWarpNameWordListKey();
        final Set<String> existingNames = getWarpNamesInWorld(world);
        if (teleporter != null) {
            final String ownName = teleporter.getOwnedWarp();
            if (ownName != null && !teleporter.isCustomName()) {
                existingNames.remove(ownName);
            }
        }
        return WordList.getWordList(wordListKey).pickTranslationKey(random, existingNames, language);
    }
    
    @Nonnull
    private static Set<String> getWarpNamesInWorld(final World world) {
        final Set<String> existingNames = new HashSet<String>();
        for (final Warp warp : TeleportPlugin.get().getWarps().values()) {
            if (warp.getWorld().equals(world.getName())) {
                existingNames.add(warp.getId());
            }
        }
        return existingNames;
    }
}
