package com.craigvg.lichun_android.ui.screens.dating.components import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* import androidx.compose.material3.* import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Brush 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.DateActivity import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.ui.theme.AppSpacing import com.craigvg.lichun_android.ui.theme.AppTypography /** * Selectable date activity card */ @Composable fun ActivityOptionCard( activity: DateActivity, isSelected: Boolean, canAfford: Boolean, onClick: () -> Unit ) { Card( modifier = Modifier .fillMaxWidth() .alpha(if (canAfford) 1f else 0.5f) .clickable(enabled = canAfford, onClick = onClick) .then( if (isSelected) { Modifier.border( width = 2.dp, brush = Brush.linearGradient( colors = listOf(AppColors.primary, AppColors.primary.copy(alpha = 0.7f)) ), shape = RoundedCornerShape(AppSpacing.cornerRadius) ) } else Modifier ), shape = RoundedCornerShape(AppSpacing.cornerRadius), colors = CardDefaults.cardColors(containerColor = AppColors.surfaceElevated), elevation = CardDefaults.cardElevation( defaultElevation = if (isSelected) 8.dp else 4.dp ) ) { Column( modifier = Modifier .fillMaxWidth() .padding(AppSpacing.md), horizontalAlignment = Alignment.CenterHorizontally ) { // Icon and premium badge Box(contentAlignment = Alignment.TopEnd) { Box( modifier = Modifier .size(80.dp) .background( brush = Brush.radialGradient( colors = listOf( (if (activity.premium) AppColors.diamond else AppColors.primary).copy(alpha = 0.15f), Color.Transparent ) ), shape = CircleShape ), contentAlignment = Alignment.Center ) { Text(text = activity.icon, fontSize = 52.sp) } if (activity.premium) { Box( modifier = Modifier .clip(RoundedCornerShape(8.dp)) .background( Brush.horizontalGradient( colors = listOf(AppColors.diamond, AppColors.diamond.copy(alpha = 0.8f)) ) ) .padding(horizontal = 6.dp, vertical = 3.dp) ) { Row( horizontalArrangement = Arrangement.spacedBy(2.dp), verticalAlignment = Alignment.CenterVertically ) { Icon( imageVector = Icons.Default.Diamond, contentDescription = null, tint = Color.White, modifier = Modifier.size(8.dp) ) Text(text = "PREMIUM", fontSize = 8.sp, color = Color.White) } } } } Spacer(modifier = Modifier.height(AppSpacing.sm)) Text( text = activity.name, style = AppTypography.headline, color = AppColors.primaryText, textAlign = TextAlign.Center, maxLines = 2 ) Spacer(modifier = Modifier.height(AppSpacing.sm)) HorizontalDivider( color = AppColors.primary.copy(alpha = 0.3f), modifier = Modifier.fillMaxWidth(0.6f) ) Spacer(modifier = Modifier.height(AppSpacing.sm)) // Costs DateCostDisplay(activity = activity) Spacer(modifier = Modifier.height(AppSpacing.sm)) // Affinity gain Row( modifier = Modifier .clip(RoundedCornerShape(AppSpacing.smallCornerRadius)) .background(AppColors.primary.copy(alpha = 0.1f)) .padding(horizontal = AppSpacing.sm, vertical = AppSpacing.xs), horizontalArrangement = Arrangement.spacedBy(AppSpacing.xs), verticalAlignment = Alignment.CenterVertically ) { Icon( imageVector = Icons.Default.Favorite, contentDescription = null, tint = AppColors.primary, modifier = Modifier.size(14.dp) ) Text( text = activity.affinityRange, style = AppTypography.captionBold, color = AppColors.primary ) } } } }