package eventDemo.app.entity import kotlinx.serialization.Serializable @Serializable @JvmInline value class PlayersHands( private val map: Map> = emptyMap(), ) : Map> by map { constructor(players: Set) : this(players.associateWith { emptyList() }.toPlayersHands()) fun removeCard( player: Player, card: Card, ): PlayersHands = mapValues { (p, cards) -> if (p == player) { cards - card } else { cards } }.toPlayersHands() fun addCards( player: Player, newCards: List, ): PlayersHands = mapValues { (p, cards) -> if (p == player) { cards + newCards } else { cards } }.toPlayersHands() } fun Map>.toPlayersHands(): PlayersHands = PlayersHands(this)