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.items import androidx.compose.foundation.shape.CircleShape 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.draw.clip 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.UserViewModel data class SearchResult( val id: Int, val name: String, val username: String, val avatar: String?, val type: String // "user" or "post" ) @Composable fun SearchScreen( userViewModel: UserViewModel = hiltViewModel(), onUserClick: (Int) -> Unit = {}, onPostClick: (Int) -> Unit = {} ) { val searchQuery = remember { mutableStateOf("") } val searchResults = remember { mutableStateOf>(emptyList()) } val isSearching = remember { mutableStateOf(false) } val recentSearches = remember { mutableStateOf(listOf("Android", "Kotlin", "UI Design", "Social Media")) } 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(44.dp) .clip(RoundedCornerShape(20.dp)) .background(MaterialTheme.colorScheme.surface) .padding(horizontal = 12.dp), contentAlignment = Alignment.CenterStart ) { if (searchQuery.value.isEmpty()) { 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(20.dp) ) Text( text = "Search...", fontSize = 14.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f) ) } } else { 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(20.dp) ) Text( text = searchQuery.value, fontSize = 14.sp, color = MaterialTheme.colorScheme.onSurface ) } } } if (searchQuery.value.isNotEmpty()) { IconButton( onClick = { searchQuery.value = "" }, modifier = Modifier.size(40.dp) ) { Icon( imageVector = Icons.Default.Close, contentDescription = "Clear", tint = MaterialTheme.colorScheme.onBackground ) } } } if (searchQuery.value.isEmpty()) { // Recent Searches LazyColumn(modifier = Modifier.fillMaxSize()) { item { Text( text = "Recent Searches", fontSize = 16.sp, fontWeight = FontWeight.Bold, modifier = Modifier.padding(16.dp) ) } items(recentSearches.value) { search -> Row( modifier = Modifier .fillMaxWidth() .clickable { searchQuery.value = search } .padding(16.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.weight(1f) ) { Icon( imageVector = Icons.Default.History, contentDescription = "Recent", tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f), modifier = Modifier.size(20.dp) ) Spacer(modifier = Modifier.width(12.dp)) Text(text = search, fontSize = 14.sp) } IconButton(onClick = { /* Remove */ }, modifier = Modifier.size(32.dp)) { Icon( imageVector = Icons.Default.Close, contentDescription = "Remove", tint = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.3f), modifier = Modifier.size(16.dp) ) } } } } } else { // Search Results LazyColumn(modifier = Modifier.fillMaxSize()) { // Users section item { Text( text = "Users", fontSize = 14.sp, fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), modifier = Modifier.padding(16.dp) ) } items(3) { index -> UserSearchResult( name = "User ${index + 1}", username = "@user${index + 1}", onUserClick = { onUserClick(index) } ) } item { Spacer(modifier = Modifier.height(16.dp)) } // Posts section item { Text( text = "Posts", fontSize = 14.sp, fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f), modifier = Modifier.padding(16.dp) ) } items(3) { index -> PostSearchResult( title = "Post ${index + 1}", author = "User ${index + 1}", onPostClick = { onPostClick(index) } ) } } } } } @Composable private fun UserSearchResult( name: String, username: String, onUserClick: () -> Unit ) { Row( modifier = Modifier .fillMaxWidth() .clickable { onUserClick() } .padding(16.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.weight(1f) ) { Box( modifier = Modifier .size(48.dp) .clip(CircleShape) .background(AccentMagenta.copy(alpha = 0.3f)), contentAlignment = Alignment.Center ) { Text( text = name.first().toString(), fontSize = 20.sp, fontWeight = FontWeight.Bold, color = AccentMagenta ) } Spacer(modifier = Modifier.width(12.dp)) Column { Text( text = name, fontSize = 14.sp, fontWeight = FontWeight.SemiBold ) Text( text = username, fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) ) } } Button( onClick = { /* Follow */ }, modifier = Modifier .height(36.dp) .clip(RoundedCornerShape(18.dp)), colors = ButtonDefaults.buttonColors(containerColor = AccentMagenta), contentPadding = PaddingValues(horizontal = 16.dp) ) { Text("Follow", fontSize = 12.sp, fontWeight = FontWeight.SemiBold) } } } @Composable private fun PostSearchResult( title: String, author: String, onPostClick: () -> Unit ) { Row( modifier = Modifier .fillMaxWidth() .clickable { onPostClick() } .padding(16.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(12.dp) ) { Box( modifier = Modifier .size(60.dp) .clip(RoundedCornerShape(12.dp)) .background(MaterialTheme.colorScheme.surface) ) Column(modifier = Modifier.weight(1f)) { Text( text = title, fontSize = 14.sp, fontWeight = FontWeight.SemiBold, maxLines = 1 ) Text( text = "by $author", fontSize = 12.sp, color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.6f) ) } } }