package com.craigvg.lichun_android.ui.screens.messaging import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.craigvg.lichun_android.ui.screens.messaging.components.ConversationListItem import com.craigvg.lichun_android.ui.screens.messaging.components.MessagesEmptyState import com.craigvg.lichun_android.ui.screens.messaging.components.MessagesHeaderCard import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.ui.theme.AppSpacing import com.craigvg.lichun_android.viewmodel.PlayerViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle /** * Messages screen - Inbox/message list * Ported from iOS MessagesView.swift */ @Composable fun MessagesScreen( playerViewModel: PlayerViewModel = hiltViewModel(), onConversationClick: (String) -> Unit = {} ) { val conversations by playerViewModel.activeConversations.collectAsStateWithLifecycle() Column( modifier = Modifier .fillMaxSize() .background(AppColors.background) ) { // Header MessagesHeaderCard() if (conversations.isEmpty()) { MessagesEmptyState() } else { LazyColumn( modifier = Modifier .fillMaxSize() .padding(horizontal = AppSpacing.md), verticalArrangement = Arrangement.spacedBy(AppSpacing.xs) ) { items(conversations) { conversation -> val person = conversation.character?.let { playerViewModel.findPersonById(it) } val characterId = conversation.character ?: "" ConversationListItem( conversation = conversation, displayName = person?.let { "${it.firstname} ${it.lastname}" }, displayImageUrl = person?.image ?: "", onClick = { if (characterId.isNotEmpty()) onConversationClick(characterId) } ) } } } } }