package com.parkplants.ui.login import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle 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 com.parkplants.ui.components.AppPasswordField import com.parkplants.ui.components.AppTextField private val Green = Color(0xFF22C55E) private val BgPage = Color(0xFF0F172A) private val BgCard = Color(0xFF1E293B) private val TextPrimary = Color(0xFFF1F5F9) private val TextSecondary = Color(0xFF94A3B8) @Composable fun LoginScreen( onLoginSuccess: () -> Unit, viewModel: LoginViewModel = hiltViewModel(), ) { val uiState by viewModel.uiState.collectAsState() LaunchedEffect(uiState.success) { if (uiState.success) onLoginSuccess() } var username by remember { mutableStateOf("admin") } var password by remember { mutableStateOf("") } Box( modifier = Modifier .fillMaxSize() .background(BgPage), contentAlignment = Alignment.Center, ) { Column( modifier = Modifier .fillMaxWidth() .padding(24.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { // Лого Box( modifier = Modifier .size(72.dp) .clip(RoundedCornerShape(20.dp)) .background(Green), contentAlignment = Alignment.Center, ) { Text("🌿", fontSize = 36.sp) } Spacer(Modifier.height(16.dp)) Text( "Карта растений", style = TextStyle( color = TextPrimary, fontSize = 22.sp, fontWeight = FontWeight.Bold, ), ) Spacer(Modifier.height(4.dp)) Text( "Вход для администратора", style = TextStyle(color = TextSecondary, fontSize = 14.sp), ) Spacer(Modifier.height(32.dp)) // Карточка формы Column( modifier = Modifier .fillMaxWidth() .clip(RoundedCornerShape(16.dp)) .background(BgCard) .padding(20.dp), verticalArrangement = Arrangement.spacedBy(16.dp), ) { AppTextField( value = username, onValueChange = { username = it }, label = "Логин", placeholder = "admin", ) AppPasswordField( value = password, onValueChange = { password = it }, label = "Пароль", placeholder = "••••••••", ) if (uiState.error != null) { Box( modifier = Modifier .fillMaxWidth() .clip(RoundedCornerShape(8.dp)) .background(Color(0xFF3F1515)) .padding(10.dp), ) { Text( uiState.error!!, style = TextStyle(color = Color(0xFFEF4444), fontSize = 13.sp), ) } } // Кнопка войти androidx.compose.material3.Button( onClick = { viewModel.login(username, password) }, modifier = Modifier .fillMaxWidth() .height(50.dp), enabled = !uiState.isLoading && username.isNotBlank() && password.isNotBlank(), colors = androidx.compose.material3.ButtonDefaults.buttonColors( containerColor = Green, disabledContainerColor = Green.copy(alpha = 0.5f), ), shape = RoundedCornerShape(10.dp), ) { if (uiState.isLoading) { CircularProgressIndicator( modifier = Modifier.size(20.dp), color = Color.White, strokeWidth = 2.dp, ) Spacer(Modifier.width(8.dp)) } Text( "Войти", style = TextStyle( color = Color.White, fontSize = 16.sp, fontWeight = FontWeight.SemiBold, ), ) } } } } }