package xyz.etztech.qol.commands;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
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.QoL;
import xyz.etztech.qol.EtzTechUtil;
import xyz.etztech.qol.Lang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class UUIDCommand implements CommandExecutor {


    QoL plugin;

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

    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) {
        if (!commandSender.hasPermission("qol.uuid")) {
            EtzTechUtil.sms(commandSender, Lang.NO_PERMISSION.getDef());
            return true;
        }
        if (args.length < 1) {
            EtzTechUtil.sms(commandSender, ChatColor.RED + "Please specify a username.");
            return true;
        }

        StringBuilder message = buildMessage(args[0]);
        EtzTechUtil.sms(commandSender, message.toString());

        return true;
    }

    private StringBuilder buildMessage(String username) {
        StringBuilder message = new StringBuilder(ChatColor.GOLD + "===== UUID Utility =====");

        boolean local = false;
        String uuid = null;
        for (Player player : Bukkit.getOnlinePlayers()) {
            if (player.getName().toLowerCase().equals(username.toLowerCase())) {
                uuid = player.getUniqueId().toString();
                message.append("\n" + ChatColor.GREEN + "Name: " + ChatColor.YELLOW + player.getName());
                message.append("\n" + ChatColor.GREEN + "UUID: " + ChatColor.YELLOW + uuid);
                local = true;
                break;
            }
        }

        if (!local) {
            try {
                InputStream response = new URL(EtzTechUtil.MOJANG_API + EtzTechUtil.path(EtzTechUtil.UUID_API, "name", username)).openStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(response));
                JsonObject jsonObject = new JsonParser().parse(reader.readLine()).getAsJsonObject();
                uuid = jsonObject.get("id").getAsString();
                message.append("\n" + ChatColor.GREEN + "Name: " + ChatColor.YELLOW + jsonObject.get("name").getAsString());
                message.append("\n" + ChatColor.GREEN + "UUID: " + ChatColor.YELLOW + uuid);
            } catch (Exception e) {
                message = new StringBuilder(ChatColor.RED + "Mojang API returned nothing. Make sure the name is spelled correctly.");
            }
        }
        return message;
    }
}