package com.craigvg.lichun_android.ui.navigation import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Favorite import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.ShoppingBag import androidx.compose.material.icons.filled.Star import androidx.compose.ui.graphics.vector.ImageVector import androidx.navigation3.runtime.NavKey import kotlinx.serialization.Serializable /** * Type-safe Navigation 3 destinations. * * Each destination is a [NavKey]. Arguments are passed as typed properties * rather than stringly-typed route segments. Top-level destinations (the * bottom-bar tabs) additionally implement [TopLevelDestination] so the UI can * derive bottom-bar visibility and selection from the key type instead of a * `startsWith(...)` route-string checklist. */ /** Marker for the four bottom-bar tabs. */ sealed interface TopLevelDestination : NavKey { val title: String val icon: ImageVector } // --------------------------------------------------------------------------- // Top-level (bottom-bar) destinations // --------------------------------------------------------------------------- @Serializable data object HomeKey : TopLevelDestination { override val title: String = "Home" override val icon: ImageVector get() = Icons.Default.Home } @Serializable data object ActivitiesKey : TopLevelDestination { override val title: String = "Activities" override val icon: ImageVector get() = Icons.Default.Star } @Serializable data object SocialKey : TopLevelDestination { override val title: String = "Social" override val icon: ImageVector get() = Icons.Default.Favorite } @Serializable data object StoreKey : TopLevelDestination { override val title: String = "Store" override val icon: ImageVector get() = Icons.Default.ShoppingBag } /** Ordered list of bottom-bar tabs (mirrors the legacy `screens` list). */ val TOP_LEVEL_DESTINATIONS: List = listOf(HomeKey, ActivitiesKey, SocialKey, StoreKey) // --------------------------------------------------------------------------- // Detail / modal destinations (formerly NavRoutes string routes) // --------------------------------------------------------------------------- @Serializable data class ChatKey(val characterId: String) : NavKey @Serializable data class PersonDetailKey(val personId: String) : NavKey @Serializable data object SettingsKey : NavKey @Serializable data object DebugToolsKey : NavKey @Serializable data object DataExportKey : NavKey @Serializable data object AccountDeletionKey : NavKey @Serializable data object AchievementsKey : NavKey @Serializable data class AchievementDetailKey(val achievementId: String) : NavKey @Serializable data object DailyRewardsKey : NavKey @Serializable data object DailyQuestsKey : NavKey // --------------------------------------------------------------------------- // Wave 2 fun/balance progression screens // --------------------------------------------------------------------------- @Serializable data object LifeGoalsKey : NavKey @Serializable data object AchievementCollectionKey : NavKey @Serializable data object PerformActivityKey : NavKey @Serializable data object PrestigeKey : NavKey @Serializable data object SwipeDatingKey : NavKey @Serializable data object RelationshipsKey : NavKey @Serializable data class RelationshipDetailKey(val personId: String) : NavKey @Serializable data object MoreKey : NavKey @Serializable data class DateActivitySelectionKey(val personId: String) : NavKey @Serializable data class DateMiniGameKey(val personId: String) : NavKey @Serializable data class ActivityDetailKey(val activityId: String) : NavKey @Serializable data object ItemsKey : NavKey @Serializable data object OnboardingKey : NavKey @Serializable data object DeathKey : NavKey @Serializable data object FamilyTreeKey : NavKey