package xyz.nkomarn.Harbor.command;

import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import xyz.nkomarn.Harbor.Harbor;
import xyz.nkomarn.Harbor.task.AccelerateNightTask;
import xyz.nkomarn.Harbor.task.Checker;
import xyz.nkomarn.Harbor.util.Config;

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

public class HarborCommand implements TabExecutor {
    @Override
    public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
        final String prefix = Config.getString("messages.miscellaneous.chat-prefix");

        if (args.length < 1 || !sender.hasPermission("harbor.admin")) {
            sender.sendMessage(ChatColor.translateAlternateColorCodes('&', String.format(
                    "%sHarbor version %s by TechToolbox (@nkomarn).", prefix, Harbor.version)));
        } else if (args[0].equalsIgnoreCase("reload")) {
            Harbor.getHarbor().reloadConfig();
            sender.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix
                    + "Reloaded configuration."));
        } else if (args[0].equalsIgnoreCase("forceskip")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix
                        + "This command requires you to be a player."));
            } else {
                Player player = (Player) sender;
                World world = player.getWorld();

                if (Checker.SKIPPING_WORLDS.contains(world)) {
                    sender.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix
                            + "This world's time is already being accelerated."));
                } else {
                    Checker.SKIPPING_WORLDS.add(world);
                    new AccelerateNightTask(world).runTaskTimer(Harbor.getHarbor(), 0L, 1);
                    sender.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix
                            + "Forcing night skip in your world."));
                }
            }
        } else {
            sender.sendMessage(ChatColor.translateAlternateColorCodes('&', prefix
                    + Config.getString("messages.miscellaneous.unrecognized-command")));
        }
        return true;
    }

    @Override
    public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
        if (!sender.hasPermission("harbor.admin")) return null;
        if (args.length != 1) return null;
        return Arrays.asList("forceskip", "reload");
    }
}