package com.craigvg.lichun_android.domain.models import androidx.compose.ui.graphics.Color import com.craigvg.lichun_android.ui.theme.AppColors import kotlinx.serialization.Serializable /** * Achievement model for tracking player progress and milestones * Ported from iOS Achievement.swift */ @Serializable enum class AchievementCategory(val displayName: String) { CAREER("Career"), RELATIONSHIPS("Relationships"), EDUCATION("Education"), WEALTH("Wealth"), ACTIVITIES("Activities"); val icon: String get() = when (this) { CAREER -> "briefcase" RELATIONSHIPS -> "heart" EDUCATION -> "graduation-cap" WEALTH -> "dollar-sign" ACTIVITIES -> "activity" } val color: Color get() = when (this) { CAREER -> AppColors.secondary RELATIONSHIPS -> AppColors.primary EDUCATION -> AppColors.intelligence WEALTH -> AppColors.money ACTIVITIES -> AppColors.accent } } @Serializable data class Achievement( val id: String, val name: String, val description: String, val category: AchievementCategory, val reward: Int, // Diamonds val requirement: String, val unlocked: Boolean = false, val unlockedAt: Long? = null, val progress: Int? = null, val progressRequired: Int? = null, val acknowledged: Boolean = false ) { val progressPercentage: Float get() { val prog = progress ?: return if (unlocked) 1f else 0f val req = progressRequired ?: return if (unlocked) 1f else 0f if (req <= 0) return if (unlocked) 1f else 0f return (prog.toFloat() / req.toFloat()).coerceIn(0f, 1f) } val iconName: String get() = if (unlocked) "trophy" else "lock" val progressText: String get() { val prog = progress ?: return "" val req = progressRequired ?: return "" return "$prog/$req" } }