package me.StevenLawson.TotalFreedomMod.commands;

import me.StevenLawson.TotalFreedomMod.command.CommandBlocker;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Run any command on all users, username placeholder = ?.", usage = "/<command> [fluff] ? [fluff] ?")
public class Command_wildcard extends FreedomCommand {
    @Override
    public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) {
        if (args.length == 0) {
            return false;
        }

        String arguments = String.join(" ", args);

        if (arguments.toLowerCase().contains("wildcard") || arguments.toLowerCase().contains("gcmd")) {
            playerMsg(sender, "What the hell are you trying to do, you stupid idiot...", ChatColor.RED);
            return true;
        }
        if (arguments.toLowerCase().contains("gtfo"))
        {
            playerMsg(sender, "Nice try", ChatColor.RED);
            return true;
        }
        if (arguments.toLowerCase().contains("doom"))
        {
            playerMsg(sender, "Look, we all hate people, but this is not the way to deal with it, doom is evil enough!", ChatColor.RED);
            return true;
        }
        if (arguments.toLowerCase().contains("saconfig"))
        {
            playerMsg(sender, "WOA, WTF are you trying to do???", ChatColor.RED);
            return true;
        }

        String baseCommand = StringUtils.join(args, " ");

        if (CommandBlocker.isCommandBlocked(baseCommand, sender))
        {
            // CommandBlocker handles messages and broadcasts
            return true;
        }

        for (Player player : server.getOnlinePlayers())
        {
            String out_command = baseCommand.replaceAll("\\x3f", player.getName());
            playerMsg(sender, "Running Command: " + out_command);
            server.dispatchCommand(sender, out_command);
        }

        return true;
    }
}