package core.presentation.components import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ChatBubble import androidx.compose.material.icons.filled.People import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.blur import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import ru.knot.messager.R @Composable fun GlassNavigationBar( currentRoute: String, onNavigate: (String) -> Unit, userAvatarUrl: String? = null, username: String = "" ) { // Контейнер с эффектом стекла Box( modifier = Modifier .fillMaxWidth() .padding(horizontal = 24.dp, vertical = 16.dp) .height(72.dp) .clip(RoundedCornerShape(32.dp)) .background( Brush.verticalGradient( colors = listOf( MaterialTheme.colorScheme.surface.copy(alpha = 0.7f), MaterialTheme.colorScheme.surface.copy(alpha = 0.5f) ) ) ) .border( 1.dp, Brush.verticalGradient( colors = listOf( Color.White.copy(alpha = 0.2f), Color.Transparent ) ), RoundedCornerShape(32.dp) ), contentAlignment = Alignment.Center ) { Row( modifier = Modifier.fillMaxSize(), horizontalArrangement = Arrangement.SpaceEvenly, verticalAlignment = Alignment.CenterVertically ) { NavItem( icon = Icons.Default.ChatBubble, label = stringResource(R.string.chats), isSelected = currentRoute == "chat_list", onClick = { onNavigate("chat_list") } ) NavItem( icon = Icons.Default.People, label = stringResource(R.string.contacts_tab), isSelected = currentRoute == "contacts", onClick = { onNavigate("contacts") } ) NavItem( icon = Icons.Default.Settings, label = stringResource(R.string.settings), isSelected = currentRoute == "settings", onClick = { onNavigate("settings") } ) // Профиль с аватаром ProfileNavItem( avatarUrl = userAvatarUrl, username = username, isSelected = currentRoute.startsWith("profile"), onClick = { onNavigate("profile") } ) } } } @Composable private fun NavItem( icon: ImageVector, label: String, isSelected: Boolean, onClick: () -> Unit ) { val contentColor = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant val backgroundColor = if (isSelected) MaterialTheme.colorScheme.primary.copy(alpha = 0.1f) else Color.Transparent Column( modifier = Modifier .clip(RoundedCornerShape(20.dp)) .background(backgroundColor) .clickable(onClick = onClick) .padding(horizontal = 12.dp, vertical = 8.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Icon(icon, contentDescription = label, tint = contentColor, modifier = Modifier.size(24.dp)) Text(text = label, color = contentColor, fontSize = 10.sp, modifier = Modifier.padding(top = 2.dp)) } } @Composable private fun ProfileNavItem( avatarUrl: String?, username: String, isSelected: Boolean, onClick: () -> Unit ) { val borderColor = if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent Column( modifier = Modifier .clip(RoundedCornerShape(20.dp)) .clickable(onClick = onClick) .padding(horizontal = 12.dp, vertical = 8.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Box( modifier = Modifier .size(28.dp) .border(2.dp, borderColor, CircleShape) .padding(2.dp) ) { AppAvatar( url = avatarUrl, name = username, size = 24.dp ) } Text( text = stringResource(R.string.profile_tab), color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant, fontSize = 10.sp, modifier = Modifier.padding(top = 2.dp) ) } }