using Avalonia.Controls;
using Avalonia.Interactivity;
using ChronoFlow.Model;
using ChronoFlow.Security;
namespace ChronoFlow.View.Admin;
///
/// Dialogfenster zur Bearbeitung eines Mitarbeiters durch den Admin.
/// Enthält Eingabefelder für Name, Abteilung, Nummer und optional Passwort-Reset.
///
public partial class MitarbeiterBearbeitenDialog : Window
{
///
/// Benutzerobjekt mit den aktualisierten Werten, wird beim Schließen zurückgegeben.
///
public User UpdatedUser { get; private set; }
///
/// Konstruktor – befüllt die UI mit den bestehenden Benutzerwerten.
///
/// Der zu bearbeitende Benutzer
public MitarbeiterBearbeitenDialog(User user)
{
InitializeComponent();
// Erzeuge eine Kopie mit übertragbaren Werten
UpdatedUser = new User
{
Username = user.Username,
OriginalUsername = user.Username, // für Identifikation bei Änderungen
Abteilung = user.Abteilung,
Mitarbeiternummer = user.Mitarbeiternummer
};
// Setze UI-Felder
UsernameBox.Text = user.Username;
AbteilungBox.Text = user.Abteilung;
MitarbeiternummerBox.Text = user.Mitarbeiternummer;
}
///
/// Wird ausgeführt, wenn der Admin auf „Speichern“ klickt.
/// Änderungen werden übernommen und ggf. Passwort zurückgesetzt.
///
private void SpeichernButton_Click(object? sender, RoutedEventArgs e)
{
// Aktualisiere Werte aus der Eingabe
UpdatedUser.Username = UsernameBox.Text ?? UpdatedUser.Username;
UpdatedUser.Abteilung = AbteilungBox.Text ?? UpdatedUser.Abteilung;
UpdatedUser.Mitarbeiternummer = MitarbeiternummerBox.Text ?? UpdatedUser.Mitarbeiternummer;
// Falls Passwort zurückgesetzt werden soll
if (ResetPasswordCheckbox.IsChecked == true)
{
UpdatedUser.Password = PasswordHasher.HashPassword("newpassword");
UpdatedUser.MussPasswortAendern = true; // Benutzer muss neues Passwort setzen
}
// Schließe Fenster und übergebe aktualisierten Benutzer
this.Close(UpdatedUser);
}
///
/// Wird ausgeführt, wenn der Admin den Dialog ohne Änderungen verlässt.
///
private void AbbrechenButton_Click(object? sender, RoutedEventArgs e)
{
this.Close(null);
}
}