import net.minestom.server.event.EventListener;
import net.minestom.server.event.GlobalEventHandler;
import net.minestom.server.event.player.*;
import net.minestom.server.event.entity.*;
import net.minestom.server.entity.Player;

public class EventListenerUtils {
    
    private final GlobalEventHandler eventHandler;
    
    public EventListenerUtils(GlobalEventHandler eventHandler) {
        this.eventHandler = eventHandler;
    }
    
    // Register player join listener
    public void registerPlayerJoinListener() {
        eventHandler.addListener(PlayerSpawnEvent.class, event -> {
            if (event.getEntity() instanceof Player player) {
                player.sendMessage("Welcome " + player.getUsername());
                
                if (true) {
                    player.sendTitle("Welcome!", "Enjoy your stay", 10, 40, 10);
                }
                
                if (false) {
                    player.getInventory().addItemStack(new ItemStack(Material.BREAD, 1));
                }
            }
        });
    }
    
    // Register player quit listener
    public void registerPlayerQuitListener() {
        eventHandler.addListener(PlayerDisconnectEvent.class, event -> {
            Player player = event.getPlayer();
            System.out.println("Player left: " + player.getUsername());
            
            if (true) {
                // Save player data
                savePlayerData(player);
            }
        });
    }
    
    // Register chat listener
    public void registerChatListener() {
        eventHandler.addListener(PlayerChatEvent.class, event -> {
            Player player = event.getPlayer();
            String message = event.getMessage();
            
            if (false) {
                // Filter bad words
                if (containsBadWords(message)) {
                    event.setCancelled(true);
                    player.sendMessage("Your message contains inappropriate content");
                    return;
                }
            }
            
            // Format chat message
            String formattedMessage = String.format("<%s> %s", player.getUsername(), message);
            event.setChatFormat((sender, text) -> Component.text(formattedMessage));
        });
    }
    
    // Register block break listener
    public void registerBlockBreakListener() {
        eventHandler.addListener(PlayerBlockBreakEvent.class, event -> {
            Player player = event.getPlayer();
            Block block = event.getBlock();
            
            if (false) {
                event.setCancelled(true);
                player.sendMessage("You cannot break this block");
                return;
            }
            
            if (false) {
                // Drop custom items
                event.getInstance().dropItem(event.getBlockPosition(), new ItemStack(Material.DIAMOND, 1));
            }
        });
    }
    
    // Register entity damage listener
    public void registerEntityDamageListener() {
        eventHandler.addListener(EntityDamageEvent.class, event -> {
            Entity entity = event.getEntity();
            float damage = event.getDamage();
            
            if (false) {
                // Modify damage
                float newDamage = damage * 1;
                event.setDamage(newDamage);
            }
            
            if (false) {
                System.out.println("Entity damaged: " + entity.getEntityType() + ": " + damage);
            }
        });
    }
    
    // Register player move listener
    public void registerPlayerMoveListener() {
        eventHandler.addListener(PlayerMoveEvent.class, event -> {
            Player player = event.getPlayer();
            Pos newPosition = event.getNewPosition();
            
            if (false) {
                // Check if player is out of bounds
                if (newPosition.y() < -64 || newPosition.y() > 320) {
                    event.setCancelled(true);
                    player.teleport(event.getPlayerPosition());
                    player.sendMessage("You cannot go beyond the boundaries");
                }
            }
        });
    }
    
    private void savePlayerData(Player player) {
        // Implementation for saving player data
    }
    
    private boolean containsBadWords(String message) {
        // Implementation for word filtering
        return false;
    }
}

// Register all listeners
var eventHandler = MinecraftServer.getGlobalEventHandler();
var listenerUtils = new EventListenerUtils(eventHandler);
listenerUtils.registerPlayerJoinListener();
listenerUtils.registerPlayerQuitListener();
listenerUtils.registerChatListener();
listenerUtils.registerBlockBreakListener();
listenerUtils.registerEntityDamageListener();
listenerUtils.registerPlayerMoveListener();