using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using UtopiaCanteenSystem.Services; namespace UtopiaCanteenSystem.ViewModels; public partial class AdminSettingsAuthViewModel : ObservableObject { private readonly IAuthService _authService; private readonly AppSession _session; private readonly INavigationService _navigation; [ObservableProperty] private string _username = string.Empty; // Updated from code-behind (PasswordBox doesn't support binding cleanly). [ObservableProperty] private string _password = string.Empty; [ObservableProperty] private string _errorMessage = string.Empty; [ObservableProperty] private bool _isBusy; public AdminSettingsAuthViewModel(IAuthService authService, AppSession session, INavigationService navigation) { _authService = authService; _session = session; _navigation = navigation; } [RelayCommand] private void Cancel() { _navigation.NavigateToDashboard(); } [RelayCommand] private async Task ConfirmAsync() { if (IsBusy) return; ErrorMessage = string.Empty; var user = Username?.Trim() ?? string.Empty; var pass = Password ?? string.Empty; // Clear fields after clicking confirm (per kiosk behavior). Username = string.Empty; Password = string.Empty; if (string.IsNullOrWhiteSpace(user) || string.IsNullOrEmpty(pass)) { ErrorMessage = "Admin username and password are required."; return; } IsBusy = true; try { var result = await _authService.LoginAsync(user, pass).ConfigureAwait(true); if (!result.Success) { ErrorMessage = "Admin rights required. Invalid username/password."; return; } // Refresh session details (who authenticated for Settings). _session.SetAdminAuthenticated(user, result.EmployeeId); _navigation.NavigateToSettings(); } finally { IsBusy = false; } } }