package de.iani.treasurechest.commands;

import de.iani.cubesideutils.bukkit.commands.SubCommand;
import de.iani.cubesideutils.bukkit.commands.exceptions.DisallowsCommandBlockException;
import de.iani.cubesideutils.bukkit.commands.exceptions.IllegalSyntaxException;
import de.iani.cubesideutils.bukkit.commands.exceptions.InternalCommandException;
import de.iani.cubesideutils.bukkit.commands.exceptions.NoPermissionException;
import de.iani.cubesideutils.bukkit.commands.exceptions.RequiresPlayerException;
import de.iani.cubesideutils.commands.ArgsParser;
import de.iani.playerUUIDCache.CachedPlayer;
import de.iani.treasurechest.Permissions;
import de.iani.treasurechest.TreasureChest;
import de.iani.treasurechest.TreasureChestItem;
import java.util.Collection;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class GiveCommand extends SubCommand {
    private TreasureChest plugin;

    public GiveCommand(TreasureChest plugin) {
        this.plugin = plugin;
    }

    @Override
    public String getRequiredPermission() {
        return Permissions.GIVE;
    }

    @Override
    public boolean requiresPlayer() {
        return true;
    }

    @Override
    public String getUsage() {
        return "<player> [...]";
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) throws DisallowsCommandBlockException, RequiresPlayerException, NoPermissionException, IllegalSyntaxException, InternalCommandException {
        if (args.remaining() < 1) {
            plugin.sendMessage(sender, commandString + getUsage(), true);
            return true;
        }
        Player player = ((Player) sender);
        TreasureChestItem activeItem = plugin.getData().getActiveItem(player.getUniqueId());
        if (activeItem == null) {
            plugin.sendMessage(sender, "You have no active item!", true);
            return true;
        }

        while (args.hasNext()) {
            String nameOrId = args.getNext().replace(",", "").trim();
            if (nameOrId.length() > 0) {
                CachedPlayer target = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(nameOrId);
                if (target == null) {
                    plugin.sendMessage(sender, "Unknown player: " + nameOrId, true);
                } else {
                    plugin.addItem(target, activeItem.getDisplayItem(), activeItem.getPriceItems(), activeItem.getPriceMoney());
                    plugin.sendMessage(sender, "Item given to: " + target.getName());
                }
            }
        }
        return true;
    }

    @Override
    public Collection<String> onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) {
        return null;
    }
}
