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

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

import java.util.Map;
import java.util.UUID;
import com.hypixel.hytale.server.core.Message;
import java.util.concurrent.CompletableFuture;
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.auth.ProfileServiceClient;
import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.modules.accesscontrol.provider.HytaleBanProvider;
import com.hypixel.hytale.server.core.command.system.basecommands.AbstractAsyncCommand;

public class UnbanCommand extends AbstractAsyncCommand
{
    @Nonnull
    private final HytaleBanProvider banProvider;
    @Nonnull
    private final RequiredArg<ProfileServiceClient.PublicGameProfile> playerArg;
    
    public UnbanCommand(@Nonnull final HytaleBanProvider banProvider) {
        super("unban", "server.commands.unban.desc");
        this.playerArg = this.withRequiredArg("player", "server.commands.unban.player.desc", ArgTypes.GAME_PROFILE_LOOKUP);
        this.setUnavailableInSingleplayer(true);
        this.banProvider = banProvider;
    }
    
    @Nonnull
    @Override
    protected CompletableFuture<Void> executeAsync(@Nonnull final CommandContext context) {
        final ProfileServiceClient.PublicGameProfile profile = this.playerArg.get(context);
        if (profile == null) {
            return CompletableFuture.completedFuture((Void)null);
        }
        final UUID uuid = profile.getUuid();
        final Message displayMessage = Message.raw(profile.getUsername()).bold(true);
        if (!this.banProvider.hasBan(uuid)) {
            context.sendMessage(Message.translation("server.modules.unban.playerNotBanned").param("name", displayMessage));
        }
        else {
            this.banProvider.modify(map -> map.remove(uuid) != null);
            context.sendMessage(Message.translation("server.modules.unban.success").param("name", displayMessage));
        }
        return CompletableFuture.completedFuture((Void)null);
    }
}
