package fr.luc.gamingcore.listener;

import fr.luc.gamingcore.Main;
import fr.luc.gamingcore.manager.NametagManager;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;

/**
 * Écouteur gérant l'assignation automatique des Nametags et noms TabList à la connexion/déconnexion des joueurs.
 */
public class NametagListener implements Listener {

    private final Main plugin;
    private final NametagManager nametagManager;

    /**
     * Constructeur de l'écouteur de Nametags.
     *
     * @param plugin Instance principale du plugin.
     */
    public NametagListener(Main plugin) {
        this.plugin = plugin;
        this.nametagManager = plugin.getNametagManager();
    }

    /**
     * Met à jour le tag au-dessus de la tête et dans la TabList lors de la connexion.
     *
     * @param event L'événement PlayerJoinEvent.
     */
    @EventHandler(priority = EventPriority.MONITOR)
    public void onPlayerJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();
        // Léger délai d'un tick pour laisser le client charger le scoreboard
        plugin.getServer().getScheduler().runTask(plugin, () -> {
            if (player.isOnline()) {
                nametagManager.updatePlayer(player);
            }
        });
    }

    /**
     * Nettoie les entrées de scoreboard à la déconnexion.
     *
     * @param event L'événement PlayerQuitEvent.
     */
    @EventHandler(priority = EventPriority.MONITOR)
    public void onPlayerQuit(PlayerQuitEvent event) {
        nametagManager.removePlayer(event.getPlayer());
    }
}
