Utopia-Canteen-System/ViewModels/AdminSettingsAuthViewModel.cs

81 lines
2.1 KiB
C#

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;
}
}
}