package xyz.etztech.qol.commands;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import xyz.etztech.qol.EtzTechUtil;
import xyz.etztech.qol.Lang;
import xyz.etztech.qol.QoL;

import java.util.Arrays;
import java.util.List;

public class TimeoutCommand implements CommandExecutor {

    private final List<String> TRUE = Arrays.asList("on", "yes", "true");
    private final List<String> FALSE = Arrays.asList("off", "no", "false");

    QoL plugin;

    public TimeoutCommand(QoL paramQoL)
    {
        this.plugin = paramQoL;
    }

    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) {
        if (!commandSender.hasPermission("qol.timeout.command")) {
            EtzTechUtil.sms(commandSender, Lang.NO_PERMISSION.getDef());
            return true;
        }

        String name;
        if (commandSender instanceof Player) {
            name = commandSender.getName();
        } else {
            name = "Console";
        }

        if (args.length < 1) {
            EtzTechUtil.sms(commandSender, ChatColor.RED + "/timeout on|off|yes|no|true|false");
            return true;
        }

        Boolean enabled = parse(args[0]);

        if (enabled == null) {
            EtzTechUtil.sms(commandSender, ChatColor.RED + "/timeout on|off|yes|no|true|false");
            return true;
        }

        QoL.setTimeout(enabled);

        String activated = enabled ? "activated" : "deactivated";

        for (Player player : Bukkit.getOnlinePlayers()) {
            EtzTechUtil.sms(player, ChatColor.YELLOW + "A chat timeout has been " + activated + " by " +
                    ChatColor.GREEN + name + ChatColor.YELLOW + ".");
        }


        return true;
    }

    private Boolean parse(String bool) {
        if (TRUE.contains(bool)) {
            return true;
        }
        if (FALSE.contains(bool)) {
            return false;
        }

        return null;
    }



}