package com.craigvg.lichun_android.ui.screens.home.components import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.craigvg.lichun_android.R import com.craigvg.lichun_android.domain.models.MessageEvent import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.ui.theme.AppSpacing import com.craigvg.lichun_android.ui.theme.AppTypography /** * Scrollable event timeline card * Ported from iOS LifeTimelineCard.swift */ @Composable fun LifeTimelineCard( events: List, onClaimEvent: (MessageEvent) -> Unit ) { Card( modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(AppSpacing.cornerRadius), colors = CardDefaults.cardColors(containerColor = AppColors.surfaceElevated) ) { Column( modifier = Modifier .fillMaxWidth() .padding(AppSpacing.md) ) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { Text( text = stringResource(R.string.life_events), style = AppTypography.headline, color = AppColors.primaryText ) val unclaimedCount = events.count { it.isClaimable && !it.claimed } if (unclaimedCount > 0) { Badge(containerColor = AppColors.primary) { Text( text = unclaimedCount.toString(), color = Color.White ) } } } Spacer(modifier = Modifier.height(AppSpacing.sm)) if (events.isEmpty()) { Box( modifier = Modifier .fillMaxWidth() .height(100.dp), contentAlignment = Alignment.Center ) { Text( text = stringResource(R.string.no_events_yet), style = AppTypography.body, color = AppColors.secondaryText, textAlign = TextAlign.Center ) } } else { events.take(10).forEach { event -> LifeEventCard( event = event, onClaim = { onClaimEvent(event) } ) Spacer(modifier = Modifier.height(AppSpacing.xs)) } } } } }