/*
 *   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.config

import de.steamwar.kotlin.util.Area
import de.steamwar.message.SubMessage
import net.kyori.adventure.text.Component
import org.bukkit.Location
import org.bukkit.configuration.ConfigurationSection
import org.bukkit.entity.WanderingTrader

data class TeamConfig(
    val worldConfig: TeamWorldConfig,

    val name: SubMessage,
    val color: Char
)

@JvmRecord
data class TeamWorldConfig(
    val spawnLocation: Location,
    val dealerSpawn: Location,
    val itemSpawn: Location,
    val target: Area
) {
    companion object {
        fun fromConfig(config: ConfigurationSection): TeamWorldConfig {
            val spawnLocation = config.getWorldLocation("spawn")
            val dealerSpawn = config.getWorldLocation("dealerSpawn")
            val itemSpawn = config.getWorldLocation("itemSpawn")
            val targetPos1 = config.getWorldLocation("targetMin")
            val targetPos2 = config.getWorldLocation("targetMax")

            spawnDealer(dealerSpawn)

            return TeamWorldConfig(spawnLocation, dealerSpawn, itemSpawn, Area(targetPos1, targetPos2))
        }

        private fun spawnDealer(loc: Location) =
            world.spawn(loc, WanderingTrader::class.java)
                .apply {
                    customName(Component.text("Shop"))
                    isCustomNameVisible = false
                    isInvulnerable = true
                    isSilent = true
                    isCollidable = false
                    isAware = false
                    setAI(false)
                }
    }
}
