package de.teleportsuite.listeners;

import de.teleportsuite.TeleportSuite;
import de.teleportsuite.models.TeleportLocation;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerRespawnEvent;

public class PlayerRespawnListener implements Listener {
    private final TeleportSuite plugin;
    public PlayerRespawnListener(TeleportSuite plugin) { this.plugin = plugin; }

    @EventHandler(priority = EventPriority.HIGH)
    public void onRespawn(PlayerRespawnEvent event) {
        if (!plugin.getConfigManager().deathRespawnToSpawn()) return;

        TeleportLocation spawn = plugin.getDatabaseManager().getSpawn("spawn");
        if (spawn == null) {
            plugin.getLogger().warning("death-respawn-to-spawn ist aktiv, aber kein Spawn gesetzt!");
            return;
        }

        // Spawn ist auf einem anderen Server → nach dem Respawn teleportieren
        String localServer = plugin.getConfigManager().getServerName();
        if (!spawn.isLocalServer(localServer)) {
            plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
                if (event.getPlayer().isOnline()) {
                    plugin.getTeleportManager().teleport(event.getPlayer(), spawn, false);
                }
            }, 5L);
            return;
        }

        // Spawn ist lokal → direkt als Respawn-Location setzen
        Location loc = spawn.toBukkitLocation();
        if (loc == null || loc.getWorld() == null) {
            plugin.getLogger().warning("Spawn-Welt \"" + spawn.getWorld() + "\" nicht gefunden!");
            return;
        }
        event.setRespawnLocation(loc);
    }
}
