package com.example.saludapp.ui import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp import com.example.saludapp.data.DatabaseHelper import kotlinx.coroutines.launch @Composable fun LoginScreen(onLoginSuccess: (String) -> Unit, onNavigateToRegister: () -> Unit) { var email by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } var isLoading by remember { mutableStateOf(false) } var errorMessage by remember { mutableStateOf(null) } val scope = rememberCoroutineScope() Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Column( modifier = Modifier .fillMaxSize() .padding(24.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text( text = "Iniciar Sesión", style = MaterialTheme.typography.headlineMedium, color = MaterialTheme.colorScheme.primary ) Spacer(modifier = Modifier.height(32.dp)) OutlinedTextField( value = email, onValueChange = { email = it }, label = { Text("Usuario o Email") }, modifier = Modifier.fillMaxWidth(), singleLine = true, enabled = !isLoading ) Spacer(modifier = Modifier.height(16.dp)) OutlinedTextField( value = password, onValueChange = { password = it }, label = { Text("Contraseña") }, visualTransformation = PasswordVisualTransformation(), modifier = Modifier.fillMaxWidth(), singleLine = true, enabled = !isLoading ) if (errorMessage != null) { Text( text = errorMessage!!, color = MaterialTheme.colorScheme.error, modifier = Modifier.padding(top = 16.dp) ) } Spacer(modifier = Modifier.height(32.dp)) Button( onClick = { scope.launch { isLoading = true errorMessage = null val userName = DatabaseHelper.validateLogin(email, password) isLoading = false if (userName != null) { onLoginSuccess(userName) } else { errorMessage = "Usuario o contraseña incorrectos" } } }, modifier = Modifier .fillMaxWidth() .height(56.dp), enabled = !isLoading && email.isNotEmpty() && password.isNotEmpty() ) { if (isLoading) { CircularProgressIndicator( modifier = Modifier.size(24.dp), color = MaterialTheme.colorScheme.onPrimary, strokeWidth = 2.dp ) } else { Text("Entrar") } } TextButton(onClick = onNavigateToRegister) { Text("¿No tienes cuenta? Regístrate aquí") } } } }