/*
 *   This file is a part of the SteamWar software.
 *
 *   Copyright (C) 2026 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.kotlin.ui

import de.steamwar.kotlin.ui.context.WindowContext
import org.bukkit.entity.Player
import org.bukkit.event.inventory.InventoryType

abstract class UIInventory(val player: Player): StateFlowListener() {
    var window: UIWindow? = null

    abstract fun view()

    fun open() {
        if (window == null) {
            view()
            assert(window != null) { "View method must create a inventory" }
        }

        window!!.open()
    }

    fun render() {
        window?.onClose()
        window = null
        open()
    }

    override fun update() = render()

    protected fun inventory(size: Int, title: String, init: WindowContext.() -> Unit) {
        window = UIWindow(size, title, player, init)
    }

    protected fun inventory(type: InventoryType, title: String, init: WindowContext.() -> Unit) {
        window = UIWindow(type, title, player, init)
    }
}
