package com.craigvg.lichun_android.domain.models import kotlinx.serialization.Serializable /** * Activity models * Ported from iOS Activity.swift */ /** * Base activity interface */ interface ActivityProtocol { val id: String val title: String val image: String val type: String } /** * Generic activity class */ @Serializable data class Activity( override val id: String, override val title: String, override val image: String, override val type: String, val description: String = "" ) : ActivityProtocol /** * Job level for occupations */ @Serializable data class JobLevel( val id: String, val level: String, val salary: Int, val energy_modifier: Int ) /** * Activity record for tracking historical performance */ @Serializable data class ActivityRecord( val id: String, val type: String, val location: String, val dateStarted: String, val focus: String, val level: JobLevel? = null, val performance: Int, val achievements: List = emptyList() ) /** * Education record extending activity record */ @Serializable data class EducationRecord( val id: String, val educationLevel: String, val location: String, val dateStarted: String, val focus: String, val GPA: Double, val level: JobLevel? = null, val performance: Int, val major: String? = null, val minor: String? = null ) /** * Elementary school class */ @Serializable data class ElementarySchoolClass( override val id: String, override val title: String, override val image: String, override val type: String, val description: String ) : ActivityProtocol /** * High school class */ @Serializable data class HighSchoolClass( override val id: String, override val title: String, override val image: String, override val type: String, val description: String ) : ActivityProtocol /** * Occupation class (jobs/careers) */ @Serializable data class OccupationClass( override val id: String, override val title: String, override val image: String, override val type: String, val requirements: String, val description: String, val hourType: String, val levels: List = emptyList() ) : ActivityProtocol /** * Extracurricular activity */ @Serializable data class ExtracurricularClass( override val id: String, override val title: String, override val image: String, override val type: String, val description: String ) : ActivityProtocol /** * Habit (negative behaviors player can quit) */ @Serializable data class Habit( val name: String, val description: String, val type: String, val habitType: String, val status: String, // "active" or "quitting" val quitProgress: Int // 0-30 days ) { val isQuitting: Boolean get() = status == "quitting" val quitProgressPercentage: Float get() = (quitProgress / 30f).coerceIn(0f, 1f) }