package cn.yescallop.essentialsnk.command.defaults.teleport;

import cn.nukkit.Player;
import cn.nukkit.command.CommandSender;
import cn.nukkit.utils.TextFormat;
import cn.yescallop.essentialsnk.EssentialsAPI;
import cn.yescallop.essentialsnk.Language;
import cn.yescallop.essentialsnk.TPRequest;
import cn.yescallop.essentialsnk.command.CommandBase;

public class TPDenyCommand extends CommandBase {

    public TPDenyCommand(EssentialsAPI api) {
        super("tpdeny", api);
        this.setAliases(new String[]{"tpno"});
    }

    public boolean execute(CommandSender sender, String label, String[] args) {
        if (!this.testPermission(sender)) {
            return false;
        }
        if (!this.testIngame(sender)) {
            return false;
        }
        if (args.length > 1) {
            this.sendUsage(sender);
            return false;
        }
        Player to = (Player) sender;
        if (api.getLatestTPRequestTo(to) == null) {
            sender.sendMessage(TextFormat.RED + Language.translate("commands.tpaccept.noRequest"));
            return false;
        }
        TPRequest request;
        Player from;
        switch (args.length) {
            case 0:
                if ((request = api.getLatestTPRequestTo(to)) == null) {
                    sender.sendMessage(TextFormat.RED + Language.translate("commands.tpaccept.unavailable"));
                    return false;
                }
                from = request.getFrom();
                break;
            case 1:
                from = api.getServer().getPlayer(args[0]);
                if (from == null) {
                    sender.sendMessage(TextFormat.RED + Language.translate("commands.generic.player.notfound", args[0]));
                    return false;
                }
                if ((request = api.getTPRequestBetween(from, to)) != null) {
                    sender.sendMessage(TextFormat.RED + Language.translate("commands.tpaccept.noRequestFrom", from.getDisplayName()));
                    return false;
                }
                break;
            default:
                return false;
        }
        from.sendMessage(Language.translate("commands.tpdeny.denied", to.getDisplayName()));
        sender.sendMessage(Language.translate("commands.tpdeny.success", to.getDisplayName()));
        api.removeTPRequestBetween(from, to);
        return true;
    }
}