/*
 *   This file is a part of the SteamWar software.
 *
 *   Copyright (C) 2025 SteamWar.de-Serverteam
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU Affero General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *   GNU Affero General Public License for more details.
 *
 *   You should have received a copy of the GNU Affero General Public License
 *   along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package de.steamwar.tntleague.events

import de.steamwar.tntleague.game.TNTLeagueGame
import org.bukkit.GameMode
import org.bukkit.entity.EntityType
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.player.PlayerDropItemEvent
import org.bukkit.event.player.PlayerInteractEntityEvent
import org.bukkit.event.player.PlayerInteractEvent
import org.bukkit.event.player.PlayerJoinEvent

object LobbyListener : Listener {

    @EventHandler
    fun onPlayerJoin(e: PlayerJoinEvent) {
        TNTLeagueGame.getFreeTeam(e.player)?.run {
            join(e.player)
            TNTLeagueGame.checkStart()
        }
    }

    @EventHandler
    fun onPlayerDamage(e: EntityDamageEvent) {
        e.isCancelled = true
    }

    @EventHandler
    fun onDropEvent(e: PlayerDropItemEvent) {
        e.isCancelled = true
    }

    @EventHandler
    fun interactEvent(e: PlayerInteractEvent) {
        val team = TNTLeagueGame.getTeam(e.player)
        if (e.action.isRightClick && team != null && e.item?.isSimilar(team.readyItem()) == true && team.opposite.leader != null) {
            team.isReady = !team.isReady
        }
    }

    @EventHandler
    fun inventoryClick(e: InventoryClickEvent) {
        if (e.clickedInventory == e.whoClicked.inventory) {
            e.isCancelled = true
        }
    }

    @EventHandler
    fun onEntityInteract(e: PlayerInteractEntityEvent) {
        if (e.player.gameMode == GameMode.SPECTATOR) return

        if (e.rightClicked.type == EntityType.WANDERING_TRADER) {
            e.isCancelled = true
        }
    }
}