package com.craigvg.lichun_android.ui.screens.events.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape 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.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.craigvg.lichun_android.domain.models.AnswerOption import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.ui.theme.AppSpacing import com.craigvg.lichun_android.ui.theme.AppTypography /** * 2-column answer button grid for event modal. * Extracted from EventModal.kt */ @Composable fun EventAnswerGrid( answers: List, energy: Int, diamonds: Int, money: Double, onAnswerClick: (AnswerOption) -> Unit, modifier: Modifier = Modifier ) { Column(modifier = modifier) { // Section divider Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(AppSpacing.sm) ) { HorizontalDivider( modifier = Modifier.weight(1f), color = AppColors.secondaryText.copy(alpha = 0.3f) ) Text( text = "Choose Your Path", style = AppTypography.caption, color = AppColors.primaryText ) HorizontalDivider( modifier = Modifier.weight(1f), color = AppColors.secondaryText.copy(alpha = 0.3f) ) } Spacer(modifier = Modifier.height(AppSpacing.md)) // Use Column+Row instead of LazyVerticalGrid to avoid nested scroll conflicts val chunked = answers.chunked(2) chunked.forEachIndexed { index, row -> if (index > 0) Spacer(modifier = Modifier.height(AppSpacing.md)) Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(AppSpacing.md) ) { row.forEach { answer -> val canAfford = (answer.energyCost ?: 0) <= energy && (answer.moneyCost ?: 0.0) <= money && (answer.diamondCost ?: 0) <= diamonds Box(modifier = Modifier.weight(1f)) { CozyAnswerButton( answer = answer, enabled = canAfford, onClick = { onAnswerClick(answer) } ) } } // Fill empty space if odd number of answers if (row.size == 1) { Spacer(modifier = Modifier.weight(1f)) } } } } } @Composable private fun CozyAnswerButton( answer: AnswerOption, enabled: Boolean = true, onClick: () -> Unit ) { Card( onClick = onClick, enabled = enabled, modifier = Modifier .fillMaxWidth() .height(160.dp), shape = RoundedCornerShape(AppSpacing.cornerRadius), colors = CardDefaults.cardColors( containerColor = if (enabled) AppColors.surfaceElevated else AppColors.surfaceSubtle, disabledContainerColor = AppColors.surfaceSubtle ), elevation = CardDefaults.cardElevation(defaultElevation = if (enabled) 4.dp else 0.dp) ) { Column( modifier = Modifier .fillMaxSize() .padding(AppSpacing.md), verticalArrangement = Arrangement.SpaceBetween, horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = answer.option, style = AppTypography.body, color = if (enabled) AppColors.primaryText else AppColors.disabledText, textAlign = TextAlign.Center, maxLines = 5, modifier = Modifier.weight(1f) ) EventCostRewardRow(answer = answer) } } }