package net.dzikoysk.funnyguilds.hook;

import be.maximvdw.placeholderapi.PlaceholderAPI;
import net.dzikoysk.funnyguilds.FunnyGuilds;
import net.dzikoysk.funnyguilds.basic.rank.RankUtils;
import net.dzikoysk.funnyguilds.basic.user.User;
import net.dzikoysk.funnyguilds.element.tablist.variable.DefaultTablistVariables;
import net.dzikoysk.funnyguilds.element.tablist.variable.TablistVariable;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.panda_lang.utilities.commons.StringUtils;

import java.util.Map.Entry;

public final class MVdWPlaceholderAPIHook {
    
    public static void initPlaceholderHook() {
        FunnyGuilds plugin = FunnyGuilds.getInstance();
        
        for (Entry<String,TablistVariable> variable : DefaultTablistVariables.getFunnyVariables().entrySet()) {
            PlaceholderAPI.registerPlaceholder(plugin, "funnyguilds_" + variable.getKey(), event -> {
                OfflinePlayer target = event.getOfflinePlayer();

                if (target == null) {
                    return StringUtils.EMPTY;
                }

                User user = User.get(target.getUniqueId());

                return variable.getValue().get(user);
            });
        }
        
        // Guild TOP, positions 1-100
        for (int i = 1; i <= 100; i++) {
            final int index = i;
            PlaceholderAPI.registerPlaceholder(plugin, "funnyguilds_gtop-" + index, event -> {
                User user = User.get(event.getPlayer());
                return RankUtils.parseRank(user, "{GTOP-" + index + "}");
            });
        }
        
        // User TOP, positions 1-100
        for (int i = 1; i <= 100; i++) {
            final int index = i;
            PlaceholderAPI.registerPlaceholder(plugin, "funnyguilds_ptop-" + index, event -> RankUtils.parseRank(null, "{PTOP-" + index + "}"));
        }

        FunnyGuilds.getInstance().getPluginLogger().info("MVdWPlaceholderAPI hook has been enabled!");
    }
    
    public static String replacePlaceholders(Player user, String base) {
        return PlaceholderAPI.replacePlaceholders(user, base);
    }
    
    private MVdWPlaceholderAPIHook() {}
    
}