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

package com.hypixel.hytale.server.core.modules.blockset.commands;

import java.util.List;
import java.util.Comparator;
import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import it.unimi.dsi.fastutil.ints.IntSet;
import java.util.Collection;
import com.hypixel.hytale.server.core.util.message.MessageFormat;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.function.Function;
import com.hypixel.hytale.server.core.asset.type.blockset.config.BlockSet;
import com.hypixel.hytale.server.core.Message;
import java.util.Set;
import com.hypixel.hytale.server.core.command.system.CommandContext;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgumentType;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.modules.blockset.BlockSetModule;
import com.hypixel.hytale.server.core.command.system.basecommands.CommandBase;

public class BlockSetCommand extends CommandBase
{
    @Nonnull
    private final BlockSetModule blockSetModule;
    @Nonnull
    private final OptionalArg<String> blockSetArg;
    
    public BlockSetCommand(@Nonnull final BlockSetModule blockSetModule) {
        super("blockset", "server.commands.blockset.desc");
        this.blockSetArg = this.withOptionalArg("blockset", "server.commands.blockset.blockset.desc", ArgTypes.STRING);
        this.blockSetModule = blockSetModule;
    }
    
    @Override
    protected void executeSync(@Nonnull final CommandContext context) {
        if (!this.blockSetArg.provided(context)) {
            final Set<Message> blockSetKeys = BlockSet.getAssetMap().getAssetMap().keySet().stream().map((Function<? super Object, ?>)Message::raw).collect((Collector<? super Object, ?, Set<Message>>)Collectors.toSet());
            context.sendMessage(MessageFormat.list(null, blockSetKeys));
            return;
        }
        final String blockSetName = this.blockSetArg.get(context);
        final int index = BlockSet.getAssetMap().getIndex(blockSetName);
        if (index == Integer.MIN_VALUE) {
            context.sendMessage(Message.translation("server.modules.blockset.setNotFound").param("name", blockSetName));
            return;
        }
        final IntSet set = this.blockSetModule.getBlockSets().get(index);
        if (set == null) {
            context.sendMessage(Message.translation("server.modules.blockset.setNotFound").param("name", blockSetName));
            return;
        }
        final List<Message> names = new ObjectArrayList<Message>();
        set.forEach(i -> names.add(Message.raw(BlockType.getAssetMap().getAsset(i).getId().toString())));
        names.sort(null);
        context.sendMessage(MessageFormat.list(null, names));
    }
}
