package com.socialapp.presentation.ui.screens import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Edit import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Tab import androidx.compose.material3.TabRow import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember 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.data.api.Post import com.socialapp.presentation.ui.theme.AccentMagenta import com.socialapp.presentation.ui.theme.PrimaryBlue import com.socialapp.presentation.viewmodel.PostViewModel import com.socialapp.presentation.viewmodel.UserViewModel @Composable fun ProfileScreen( userId: Int, userViewModel: UserViewModel = hiltViewModel(), postViewModel: PostViewModel = hiltViewModel(), isOwnProfile: Boolean = false, onEditClick: () -> Unit = {}, onBackClick: () -> Unit = {} ) { val userProfile = userViewModel.userProfile.value val posts = postViewModel.posts.value val selectedTab = remember { mutableStateOf(0) } Column( modifier = Modifier .fillMaxSize() .background(MaterialTheme.colorScheme.background) ) { // Header with Back and Settings Row( modifier = Modifier .fillMaxWidth() .padding(12.dp), horizontalArrangement = androidx.compose.foundation.layout.Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { IconButton(onClick = onBackClick, modifier = Modifier.size(40.dp)) { Icon( imageVector = Icons.Default.Edit, contentDescription = "Back", tint = MaterialTheme.colorScheme.onBackground, modifier = Modifier.size(20.dp) ) } Text( text = "Hopenity", fontSize = 20.sp, fontWeight = FontWeight.Bold, color = AccentMagenta ) IconButton(onClick = { /* Settings */ }, modifier = Modifier.size(40.dp)) { Icon( imageVector = Icons.Default.Edit, contentDescription = "Settings", tint = MaterialTheme.colorScheme.onBackground, modifier = Modifier.size(20.dp) ) } } LazyColumn( modifier = Modifier.fillMaxSize() ) { item { if (userProfile != null) { // Cover Photo with light pink background Box( modifier = Modifier .fillMaxWidth() .height(160.dp) .background(AccentMagenta.copy(alpha = 0.1f)) ) { if (userProfile.coverPhoto != null) { AsyncImage( model = userProfile.coverPhoto, contentDescription = "Cover Photo", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) } } // Profile Content Column( modifier = Modifier .fillMaxWidth() .padding(16.dp) ) { // Profile Image Box( modifier = Modifier .size(90.dp) .clip(RoundedCornerShape(20.dp)) .background(AccentMagenta), contentAlignment = Alignment.Center ) { if (userProfile.profileImage != null) { AsyncImage( model = userProfile.profileImage, contentDescription = "Profile Image", modifier = Modifier .fillMaxSize() .clip(RoundedCornerShape(20.dp)), contentScale = ContentScale.Crop ) } else { Text( text = userProfile.username.firstOrNull()?.toString() ?: "U", fontSize = 40.sp, fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.background ) } } Spacer(modifier = Modifier.height(12.dp)) // Username Text( text = userProfile.username, fontSize = 22.sp, fontWeight = FontWeight.Bold ) Text( text = "@${userProfile.username.lowercase().replace(" ", "")}", fontSize = 14.sp, color = AccentMagenta, fontWeight = FontWeight.SemiBold ) Spacer(modifier = Modifier.height(12.dp)) // Stats Row( modifier = Modifier .fillMaxWidth(), horizontalArrangement = androidx.compose.foundation.layout.Arrangement.spacedBy(24.dp) ) { StatItem(userProfile.followersCount, "followers") StatItem(userProfile.followingCount, "following") StatItem(userProfile.postsCount, "friends") } Spacer(modifier = Modifier.height(16.dp)) // Action Buttons if (isOwnProfile) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = androidx.compose.foundation.layout.Arrangement.spacedBy(12.dp) ) { Button( onClick = onEditClick, modifier = Modifier .weight(1f) .height(44.dp), colors = ButtonDefaults.buttonColors( containerColor = AccentMagenta ), shape = RoundedCornerShape(20.dp) ) { Text("Edit Profile", fontWeight = FontWeight.SemiBold) } Button( onClick = { /* Post */ }, modifier = Modifier .weight(1f) .height(44.dp), colors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.surface ), shape = RoundedCornerShape(20.dp) ) { Text("Post", color = MaterialTheme.colorScheme.onSurface) } Button( onClick = { /* Promote */ }, modifier = Modifier .weight(1f) .height(44.dp), colors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.surface ), shape = RoundedCornerShape(20.dp) ) { Text("Promote", color = MaterialTheme.colorScheme.onSurface) } } } Spacer(modifier = Modifier.height(16.dp)) // Category Filter Pills LazyRow( modifier = Modifier.fillMaxWidth(), horizontalArrangement = androidx.compose.foundation.layout.Arrangement.spacedBy(8.dp) ) { items(listOf("All", "Feels", "Food", "Blood", "Essentials")) { category -> CategoryPill(text = category, isSelected = category == "All") } } } } } // Posts or Empty State if (posts.isEmpty()) { item { Box( modifier = Modifier .fillMaxWidth() .padding(32.dp), contentAlignment = Alignment.Center ) { Text( text = "No posts yet", fontSize = 16.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f) ) } } } else { items(posts) { post -> PostCard( post = post, onLikeClick = { /* Handle like */ }, onCommentClick = { /* Handle comment */ }, onProfileClick = { /* Handle profile */ } ) Spacer(modifier = Modifier.height(8.dp)) } } } } } @Composable private fun StatItem(count: Int, label: String) { Column( horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = count.toString(), fontSize = 18.sp, fontWeight = FontWeight.Bold ) Text( text = label, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) ) } } // Helper for Box offset - since Compose doesn't have native offset modifier in this version @Composable private fun Box.offset(x: androidx.compose.ui.unit.Dp = 0.dp, y: androidx.compose.ui.unit.Dp = 0.dp) { Box(modifier = Modifier.padding(top = y, start = x)) }