package auth.presentation import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons 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.res.stringResource import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp import ru.knot.messager.R @OptIn(ExperimentalMaterial3Api::class) @Composable fun LoginScreen( viewModel: AuthViewModel, onNavigateToRegister: () -> Unit, onNavigateToSettings: () -> Unit, onLoginSuccess: () -> Unit ) { val state by viewModel.state.collectAsState() var userName by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } LaunchedEffect(state.isAuthenticated) { if (state.isAuthenticated) { onLoginSuccess() } } Scaffold( topBar = { TopAppBar( title = { Text(stringResource(R.string.login)) }, actions = { IconButton(onClick = onNavigateToSettings) { Icon(Icons.Default.Settings, contentDescription = stringResource(R.string.settings)) } } ) } ) { paddingValues -> Column( modifier = Modifier .fillMaxSize() .padding(paddingValues) .padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { OutlinedTextField( value = userName, onValueChange = { userName = it }, label = { Text(stringResource(R.string.username)) }, modifier = Modifier.fillMaxWidth(), singleLine = true ) Spacer(modifier = Modifier.height(8.dp)) OutlinedTextField( value = password, onValueChange = { password = it }, label = { Text(stringResource(R.string.password)) }, modifier = Modifier.fillMaxWidth(), visualTransformation = PasswordVisualTransformation(), singleLine = true ) Spacer(modifier = Modifier.height(16.dp)) if (state.isLoading) { CircularProgressIndicator() } else { Button( onClick = { viewModel.login(userName, password) }, modifier = Modifier.fillMaxWidth(), enabled = userName.isNotBlank() && password.isNotBlank() ) { Text(stringResource(R.string.login)) } TextButton(onClick = onNavigateToRegister) { Text(stringResource(R.string.no_account_register)) } } if (state.error != null) { Text( text = state.error!!, color = MaterialTheme.colorScheme.error, modifier = Modifier.padding(top = 8.dp) ) } } } }