package eu.mrneznamy.mrultimatelibrary.utils;

import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.function.Consumer;

import eu.mrneznamy.mrultimatelibrary.scheduler.MrLibScheduler;
import eu.mrneznamy.mrultimatelibrary.utils.MrLibConsoleSayer;

public class MrLibUpdateChecker {

    private final JavaPlugin plugin;
    private final String modrinthSlug;

    public MrLibUpdateChecker(JavaPlugin plugin, String modrinthSlug) {
        this.plugin = plugin;
        this.modrinthSlug = modrinthSlug;
    }

    public void fetchLatestVersion(Consumer<String> callback) {
        fetchLatestVersion(plugin, modrinthSlug, callback);
    }

    /**
     * Static method to check version of any plugin
     */
    public static void fetchLatestVersion(JavaPlugin plugin, String modrinthSlug, Consumer<String> callback) {
        MrLibScheduler.runTaskAsynchronously(plugin, () -> {
            try {
                HttpURLConnection conn = (HttpURLConnection) new URL(
                    "https://api.modrinth.com/v2/project/" + modrinthSlug + "/version"
                ).openConnection();
                
                conn.setRequestProperty("User-Agent", plugin.getName());
                conn.setConnectTimeout(3000);
                conn.setReadTimeout(3000);
                
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line = reader.readLine();
                reader.close();
                
                if (line != null && line.contains("version_number")) {
                    String version = line.split("\"version_number\":\"")[1].split("\"")[0];
                    if (plugin.isEnabled()) {
                        MrLibScheduler.runTask(plugin, () -> callback.accept(version));
                    }
                }
            } catch (Exception e) {
                
            }
        });
    }

    public static void fetchDevVersion(JavaPlugin plugin, String modrinthSlug, Consumer<String> callback) {
        callback.accept(null);
        return;
        /*
        MrLibScheduler.runTaskAsynchronously(plugin, () -> {
            try {
                HttpURLConnection conn = (HttpURLConnection) new URL(
                    "" + modrinthSlug + "/latest-dev"
                ).openConnection();
                
                conn.setRequestProperty("User-Agent", plugin.getName());
                conn.setConnectTimeout(3000);
                conn.setReadTimeout(3000);
                
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line = reader.readLine();
                reader.close();
                
                if (line != null) {
                    final String result;
                    if (line.contains("DONT-EXIST")) {
                         result = "DONT-EXIST";
                    } else {
                         result = line;
                    }
                    if (plugin.isEnabled()) {
                        MrLibScheduler.runTask(plugin, () -> callback.accept(result));
                    }
                }
            } catch (Exception e) {
                
                if (plugin.isEnabled()) {
                    MrLibScheduler.runTask(plugin, () -> callback.accept("DONT-EXIST"));
                }
            }
        });
        */
    }

    /**
     * Check version and print to console with plugin name
     */
    public static void checkAndPrintVersion(JavaPlugin plugin, String modrinthSlug) {
        fetchLatestVersion(plugin, modrinthSlug, latestVersion -> {
            String currentVersion = plugin.getDescription().getVersion();
            
            
            eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin.RegisteredPlugin registered = 
                eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin.getPlugin(plugin.getName());
            if (registered != null) {
                registered.setLatestStableVersion(latestVersion);
            }

            
            java.util.Map<String, String> data = eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin.getSharedPluginsData().get(plugin.getName());
            if (data != null) {
                data.put("latestStableVersion", latestVersion);
            }

            if (!currentVersion.equals(latestVersion)) {
                
                
            } else {
                
            }
        });

        fetchDevVersion(plugin, modrinthSlug, devVersion -> {
            
            eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin.RegisteredPlugin registered = 
                eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin.getPlugin(plugin.getName());
            if (registered != null) {
                registered.setLatestDevVersion(devVersion);
            }

            
            java.util.Map<String, String> data = eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin.getSharedPluginsData().get(plugin.getName());
            if (data != null) {
                data.put("latestDevVersion", devVersion);
            }
            
            
            
            
            
            
            
        });
    }
}
