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.LazyColumn 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.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape 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.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.ui.theme.PrimaryBlue import com.socialapp.presentation.viewmodel.PostViewModel @Composable fun ExploreScreen( viewModel: PostViewModel = hiltViewModel(), onPostClick: (Int) -> Unit = {}, onProfileClick: (Int) -> Unit = {} ) { val posts = viewModel.posts.value val selectedTab = remember { mutableStateOf(0) } val searchQuery = remember { mutableStateOf("") } Column( modifier = Modifier .fillMaxSize() .background(MaterialTheme.colorScheme.background) ) { // Search Bar Row( modifier = Modifier .fillMaxWidth() .padding(16.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier .weight(1f) .height(40.dp) .clip(RoundedCornerShape(20.dp)) .background(MaterialTheme.colorScheme.surface) .padding(horizontal = 12.dp), contentAlignment = Alignment.CenterStart ) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.CenterVertically ) { Icon( imageVector = Icons.Default.Search, contentDescription = "Search", tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f), modifier = Modifier.size(18.dp) ) Text( text = "Search posts, people...", fontSize = 13.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f) ) } } IconButton(onClick = { /* Settings */ }, modifier = Modifier.size(40.dp)) { Icon( imageVector = Icons.Default.Tune, contentDescription = "Filter", tint = MaterialTheme.colorScheme.onBackground ) } } // Tabs Row( modifier = Modifier .fillMaxWidth() .padding(horizontal = 8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp) ) { listOf("For You", "Following", "Popular").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(8.dp)) // Grid of Posts LazyVerticalGrid( columns = GridCells.Fixed(2), modifier = Modifier .fillMaxSize() .padding(8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(posts) { post -> ExplorePostCard( post = post, onPostClick = { onPostClick(post.id) } ) } } } } @Composable private fun ExplorePostCard( post: com.socialapp.domain.model.Post, onPostClick: () -> Unit = {} ) { Box( modifier = Modifier .clip(RoundedCornerShape(20.dp)) .background(MaterialTheme.colorScheme.surface) .clickable { onPostClick() } .aspectRatio(1f) ) { if (post.media != null) { AsyncImage( model = post.media, contentDescription = "Post", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) } // Overlay Box( modifier = Modifier .fillMaxSize() .background( androidx.compose.ui.graphics.Color.Black.copy(alpha = 0.3f) ) ) // Stats Row( modifier = Modifier .align(Alignment.BottomCenter) .fillMaxWidth() .padding(8.dp), horizontalArrangement = Arrangement.SpaceEvenly ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(4.dp) ) { Icon( imageVector = Icons.Default.FavoriteBorder, contentDescription = "Likes", tint = androidx.compose.ui.graphics.Color.White, modifier = Modifier.size(16.dp) ) Spacer(modifier = Modifier.width(4.dp)) Text( text = "${post.likesCount}", color = androidx.compose.ui.graphics.Color.White, fontSize = 12.sp, fontWeight = FontWeight.Bold ) } Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(4.dp) ) { Icon( imageVector = Icons.Default.ChatBubbleOutline, contentDescription = "Comments", tint = androidx.compose.ui.graphics.Color.White, modifier = Modifier.size(16.dp) ) Spacer(modifier = Modifier.width(4.dp)) Text( text = "${post.commentsCount}", color = androidx.compose.ui.graphics.Color.White, fontSize = 12.sp, fontWeight = FontWeight.Bold ) } } } }