package com.craigvg.lichun_android.ui.screens.dating.components import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage import com.craigvg.lichun_android.domain.models.Person import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.ui.theme.AppSpacing import com.craigvg.lichun_android.ui.theme.AppTypography import kotlin.math.roundToInt /** * Enhanced profile card with drag gesture support for swipe dating */ @Composable fun EnhancedProfileCard( person: Person, offsetX: Float, offsetY: Float, rotationAngle: Float, onDragStart: () -> Unit = {}, onDrag: (Float, Float) -> Unit, onDragEnd: () -> Unit ) { Card( modifier = Modifier .fillMaxWidth(0.9f) .aspectRatio(0.7f) .offset { IntOffset(offsetX.roundToInt(), offsetY.roundToInt()) } .graphicsLayer { rotationZ = rotationAngle } .pointerInput(Unit) { detectDragGestures( onDragStart = { onDragStart() }, onDragEnd = { onDragEnd() }, onDrag = { change, dragAmount -> change.consume() onDrag(dragAmount.x, dragAmount.y) } ) }, shape = RoundedCornerShape(AppSpacing.largeCornerRadius), colors = CardDefaults.cardColors(containerColor = AppColors.surfaceElevated), elevation = CardDefaults.cardElevation(defaultElevation = 8.dp) ) { Box(modifier = Modifier.fillMaxSize()) { // Profile image AsyncImage( model = person.image, contentDescription = person.firstname, modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) // Gradient overlay Box( modifier = Modifier .fillMaxSize() .background( Brush.verticalGradient( colors = listOf( Color.Transparent, Color.Black.copy(alpha = 0.7f) ), startY = 300f ) ) ) // Profile info Column( modifier = Modifier .align(Alignment.BottomStart) .padding(AppSpacing.lg) ) { Row( verticalAlignment = Alignment.CenterVertically ) { Text( text = "${person.firstname}, ${person.ageYears}", style = AppTypography.title, color = Color.White ) person.compatibilityScore?.let { score -> Spacer(modifier = Modifier.width(AppSpacing.sm)) CompatibilityBadge( score = score, style = CompatibilityBadgeStyle.COMPACT ) } } Spacer(modifier = Modifier.height(AppSpacing.xs)) Text( text = person.bio, style = AppTypography.body, color = Color.White.copy(alpha = 0.9f), maxLines = 2 ) Spacer(modifier = Modifier.height(AppSpacing.sm)) // Stat badges Row( horizontalArrangement = Arrangement.spacedBy(AppSpacing.xs) ) { StatBadge( icon = Icons.Default.Favorite, label = "Health", value = person.health.toInt(), color = AppColors.health, modifier = Modifier.weight(1f) ) StatBadge( icon = Icons.Default.SentimentSatisfied, label = "Happy", value = person.happiness, color = AppColors.happiness, modifier = Modifier.weight(1f) ) StatBadge( icon = Icons.Default.Psychology, label = "Smart", value = person.intelligence, color = AppColors.intelligence, modifier = Modifier.weight(1f) ) } Spacer(modifier = Modifier.height(AppSpacing.xs)) // Interests Row( horizontalArrangement = Arrangement.spacedBy(AppSpacing.xs) ) { person.interests.take(3).forEach { interest -> Box( modifier = Modifier .clip(RoundedCornerShape(AppSpacing.pillCornerRadius)) .background(Color.White.copy(alpha = 0.2f)) .padding(horizontal = 10.dp, vertical = 4.dp) ) { Text( text = interest, style = AppTypography.caption, color = Color.White ) } } } } } } }