package com.craigvg.lichun_android.domain.models import kotlinx.serialization.Serializable /** * Message event model for game notifications * Ported from iOS MessageEvent.swift */ /** * Event category enum with emoji representation */ @Serializable enum class EventCategory(val emoji: String) { CAREER("briefcase"), SOCIAL("heart"), ACHIEVEMENT("trophy"), EDUCATION("graduation-cap"), HEALTH("heart-pulse"), FINANCE("dollar-sign"), RANDOM("dice-5"), NEUTRAL("info"), NEGATIVE("trending-down"); companion object { fun fromV2Category(value: String?): EventCategory { val normalized = value?.trim()?.lowercase().orEmpty() return when (normalized) { "career", "adulthood" -> CAREER "social", "family", "holidays" -> SOCIAL "achievement" -> ACHIEVEMENT "education", "adolescence" -> EDUCATION "health" -> HEALTH "finance" -> FINANCE "random", "dilemmas" -> RANDOM "negative" -> NEGATIVE else -> NEUTRAL } } } } /** * Message event representing life events in the game */ @Serializable data class MessageEvent( val id: String, val message: String, val type: String, val date: String? = null, val hour: Int = 0, val energyCost: Int? = null, val diamondCost: Int? = null, val moneyCost: Double? = null, val affinityChange: Int? = null, val title: String? = null, val image: String? = null, val characters: List? = null, val status: String? = null, val categoryKey: String? = null, val claimed: Boolean = false, val claimedAt: Long? = null, val category: EventCategory = EventCategory.NEUTRAL ) { /** * Has positive rewards to claim */ val isClaimable: Boolean get() = !claimed && ( (energyCost ?: 0) > 0 || (moneyCost ?: 0.0) > 0 || (diamondCost ?: 0) > 0 || (affinityChange ?: 0) > 0 ) /** * Has negative costs */ val isNegative: Boolean get() = (energyCost ?: 0) < 0 || (moneyCost ?: 0.0) < 0 || (diamondCost ?: 0) < 0 || (affinityChange ?: 0) < 0 }