package com.example.minecraftsite;

import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class PaperSiteSyncPlugin extends JavaPlugin {
  private String apiBaseUrl;
  private String serverKey;
  private String serverSecret;

  @Override
  public void onEnable() {
    saveDefaultConfig();
    apiBaseUrl = getConfig().getString("apiBaseUrl", "http://127.0.0.1:3000/api/minecraft/sync");
    serverKey = getConfig().getString("serverKey", "paper-main");
    serverSecret = getConfig().getString("serverSecret", "replace-me");
    getLogger().info("PaperSiteSync enabled.");
  }

  @Override
  public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player player)) {
      sender.sendMessage("This command is only available for players.");
      return true;
    }

    try {
      String response = postJson(apiBaseUrl + "/check-user", "{\"username\":\"" + player.getName() + "\"}");
      player.sendMessage("Site response: " + response);
    } catch (IOException exception) {
      player.sendMessage("Site sync failed: " + exception.getMessage());
    }

    return true;
  }

  private String postJson(String endpoint, String payload) throws IOException {
    HttpURLConnection connection = (HttpURLConnection) new URL(endpoint).openConnection();
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/json");
    connection.setRequestProperty("x-paper-server-key", serverKey);
    connection.setRequestProperty("x-paper-server-secret", serverSecret);
    connection.setDoOutput(true);

    try (OutputStream outputStream = connection.getOutputStream()) {
      outputStream.write(payload.getBytes(StandardCharsets.UTF_8));
    }

    String body = new String(connection.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
    connection.disconnect();
    return body;
  }
}
