package com.socialapp.presentation.ui.screens import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material3.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import coil.compose.AsyncImage import com.socialapp.presentation.ui.theme.AccentMagenta import com.socialapp.presentation.viewmodel.PostViewModel @Composable fun UserProfileScreen( userId: Int, viewModel: PostViewModel = hiltViewModel(), onBackClick: () -> Unit = {}, onEditClick: () -> Unit = {}, onFollowClick: () -> Unit = {}, onPostClick: (Int) -> Unit = {} ) { val posts = viewModel.posts.value val selectedTab = remember { mutableStateOf(0) } val isFollowing = remember { mutableStateOf(false) } Column( modifier = Modifier .fillMaxSize() .background(MaterialTheme.colorScheme.background) ) { // Header Row( modifier = Modifier .fillMaxWidth() .padding(16.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { IconButton(onClick = onBackClick, modifier = Modifier.size(40.dp)) { Icon( imageVector = Icons.Default.ArrowBack, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground ) } Text( text = "Profile", fontSize = 18.sp, fontWeight = FontWeight.Bold ) IconButton(onClick = { }, modifier = Modifier.size(40.dp)) { Icon( imageVector = Icons.Default.MoreVert, contentDescription = "More", tint = MaterialTheme.colorScheme.onBackground ) } } Column( modifier = Modifier .weight(1f) .verticalScroll(rememberScrollState()) ) { // Profile Header Column( modifier = Modifier .fillMaxWidth() .padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally ) { Box( modifier = Modifier .size(80.dp) .clip(CircleShape) .background(AccentMagenta.copy(alpha = 0.3f)), contentAlignment = Alignment.Center ) { Text("U", fontSize = 36.sp, fontWeight = FontWeight.Bold, color = AccentMagenta) } Spacer(modifier = Modifier.height(12.dp)) Text( text = "User Name", fontSize = 18.sp, fontWeight = FontWeight.Bold ) Text( text = "@username", fontSize = 13.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) ) Text( text = "Travel | Photography | Tech Lover", fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), modifier = Modifier.padding(top = 8.dp) ) Row( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(12.dp) ) { Column( modifier = Modifier.weight(1f), horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = "1.2K", fontSize = 16.sp, fontWeight = FontWeight.Bold ) Text( text = "Posts", fontSize = 11.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) ) } Column( modifier = Modifier.weight(1f), horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = "5.4K", fontSize = 16.sp, fontWeight = FontWeight.Bold ) Text( text = "Followers", fontSize = 11.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) ) } Column( modifier = Modifier.weight(1f), horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = "234", fontSize = 16.sp, fontWeight = FontWeight.Bold ) Text( text = "Following", fontSize = 11.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) ) } } Spacer(modifier = Modifier.height(16.dp)) Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp) ) { Button( onClick = { isFollowing.value = !isFollowing.value onFollowClick() }, modifier = Modifier .weight(1f) .height(40.dp), colors = ButtonDefaults.buttonColors( containerColor = if (isFollowing.value) MaterialTheme.colorScheme.surface else AccentMagenta ), shape = RoundedCornerShape(20.dp) ) { Text( if (isFollowing.value) "Following" else "Follow", fontSize = 13.sp, fontWeight = FontWeight.SemiBold, color = if (isFollowing.value) MaterialTheme.colorScheme.onSurface else MaterialTheme.colorScheme.background ) } Button( onClick = { }, modifier = Modifier .weight(1f) .height(40.dp), colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.surface), shape = RoundedCornerShape(20.dp) ) { Icon( imageVector = Icons.Default.Send, contentDescription = "Message", modifier = Modifier.size(18.dp) ) } } } Divider(color = MaterialTheme.colorScheme.surface, thickness = 1.dp, modifier = Modifier.padding(vertical = 16.dp)) // Tabs Row( modifier = Modifier .fillMaxWidth() .padding(horizontal = 8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp) ) { listOf("Posts", "Saved", "Tagged").forEachIndexed { index, tab -> Box( modifier = Modifier .clip(RoundedCornerShape(20.dp)) .background( if (selectedTab.value == index) MaterialTheme.colorScheme.onBackground.copy(alpha = 0.2f) else MaterialTheme.colorScheme.surface ) .clickable { selectedTab.value = index } .padding(horizontal = 12.dp, vertical = 8.dp), contentAlignment = Alignment.Center ) { Text( text = tab, fontSize = 13.sp, fontWeight = if (selectedTab.value == index) FontWeight.SemiBold else FontWeight.Normal ) } } } Spacer(modifier = Modifier.height(12.dp)) // Grid of Posts LazyVerticalGrid( columns = GridCells.Fixed(3), modifier = Modifier .fillMaxWidth() .padding(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(posts) { post -> Box( modifier = Modifier .clip(RoundedCornerShape(12.dp)) .background(MaterialTheme.colorScheme.surface) .clickable { onPostClick(post.id) } .aspectRatio(1f) ) { if (post.media != null) { AsyncImage( model = post.media, contentDescription = "Post", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) } } } } Spacer(modifier = Modifier.height(16.dp)) } } }