package eu.mrneznamy.mrultimatelibrary.utils;

import eu.mrneznamy.mrultimatelibrary.MrUltimateLibrary;
import eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin;
import eu.mrneznamy.mrultimatelibrary.scheduler.MrLibScheduler;
import org.bukkit.Bukkit;

import java.util.Map;

public class MrLibStartupPrinter {

    public static void print(org.bukkit.plugin.java.JavaPlugin plugin) {
        
        if (System.getProperty("mrlib.logo.printed") != null) {
            return;
        }
        System.setProperty("mrlib.logo.printed", "true");

        
        MrLibScheduler.runTaskLater(plugin, () -> {
            printFullReport(plugin);
        }, 60L);
    }

    private static void printFullReport(org.bukkit.plugin.java.JavaPlugin plugin) {
        String primaryColor = "8B5CF6"; 
        String libVersion = MrUltimateLibrary.VERSION;
        
        
        Bukkit.getConsoleSender().sendMessage("");
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#8B5CF6>} __  __      _   _ _   _                 _       _      _ _ _                              {#3B82F6<}"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#8B5CF6>} |  \\/  | _ _| | | | |_(_)_ __  __ _| |_ ___| |    (_) |__ _ _ __ _ _ _ _ _ {#3B82F6<}"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#8B5CF6>} | |\\/| || '_| |_| |  _| | '  \\/ _` |  _/ -_) |__  | | / _` | '_/ _` | || | {#3B82F6<}"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#8B5CF6>} |_|  |_||_|  \\___/ \\__|_|_|_|_\\__,_|\\__\\___|____| |_| \\__,_|_| \\__,_|\\_, | {#3B82F6<}"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#8B5CF6>}                                                                      |__/  {#3B82F6<}"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("                   {#8B5CF6}Version: &f" + libVersion + " {#8B5CF6}by _MrNeznamy_"));
        Bukkit.getConsoleSender().sendMessage("");
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("  &f&l" + plugin.getName() + " &e&lv" + plugin.getDescription().getVersion() + " &7&l(Lib v" + libVersion + ")"));
        Bukkit.getConsoleSender().sendMessage("");

        
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#" + primaryColor + "} Server Informations:"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("  &8- &7Server Version: &f" + Bukkit.getName() + " " + Bukkit.getVersion()));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("  &8- &7Java Version: &f" + System.getProperty("java.version")));
        Bukkit.getConsoleSender().sendMessage("");

        
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#" + primaryColor + "} Library Informations:"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("  &8- &7Library Version: &f" + libVersion));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("  &8- &7Author: &f_MrNeznamy_"));
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("  &8- &7Wiki: &fdisabled"));
        
        Bukkit.getConsoleSender().sendMessage("");

        
        Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("{#" + primaryColor + "} Registred Plugins:"));
        Map<String, Map<String, String>> plugins = MrLibRegisterPlugin.getSharedPluginsData();
        
        for (Map<String, String> data : plugins.values()) {
            String name = data.get("name");
            String version = data.get("version");
            String author = data.getOrDefault("author", "_MrNeznamy_");
            String usedLib = data.getOrDefault("lib_version", libVersion);
            
            Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("  &8• {#8B5CF6}" + name));
            Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("    &8- &7Version: &f" + version));
            Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("    &8- &7Library: &f" + usedLib));
            
            String latestStable = data.get("latestStableVersion");
            if (latestStable != null) {
                 Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("    &8- &7Latest Published Version: &f" + latestStable));
                 int comparison = MrLibVersionComparator.compare(version, latestStable);
                 if (comparison < 0) {
                     Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("    &8- &eUpdate available! &7(" + latestStable + ")"));
                 } else if (comparison > 0) {
                     Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("    &8- &aInstalled version is newer than the published release."));
                 }
            }
            
            Bukkit.getConsoleSender().sendMessage(MrLibColors.colorize("    &8- &7Author: &f" + author));
        }
        Bukkit.getConsoleSender().sendMessage("");
    }
}
