using Avalonia.Controls;
using Avalonia.Interactivity;
using ChronoFlow.Model;
namespace ChronoFlow.View.Admin;
///
/// Dialogfenster zur Bearbeitung von Mitarbeiterdaten.
/// Der übergebene Benutzer kann geändert und anschließend zurückgegeben werden.
///
public partial class MitarbeiterBearbeitenDialog : Window
{
///
/// Rückgabe des aktualisierten Benutzers nach Speichern.
///
public User UpdatedUser { get; private set; }
///
/// Gibt an, ob das Passwort dieses Benutzers zurückgesetzt wurde.
/// Wird extern aufgerufen und steuert die Anzeige des Hinweistexts.
///
public bool PasswortWurdeZurueckgesetzt
{
set
{
if (value && this.FindControl("ResetHinweisText") is { } resetText)
{
resetText.IsVisible = true;
}
}
}
///
/// Öffentlicher, parameterloser Konstruktor.
/// Wichtig für Avalonia zur Laufzeit, z.B. XAML-Loader (verhindert AVLN0005-Warnung).
///
public MitarbeiterBearbeitenDialog()
{
InitializeComponent();
UpdatedUser = new User(); // Dummy-Initialisierung für Designer oder Avalonia-Runtime
}
///
/// Konstruktor mit Benutzerobjekt – lädt dessen Daten zur Bearbeitung.
///
/// Benutzer, der bearbeitet werden soll
public MitarbeiterBearbeitenDialog(User user)
{
InitializeComponent();
// Erstellen einer Kopie des Benutzers zur späteren Rückgabe
UpdatedUser = new User
{
Username = user.Username,
OriginalUsername = user.Username, // Originalname speichern für Update-Vergleich
Abteilung = user.Abteilung,
Mitarbeiternummer = user.Mitarbeiternummer
};
// Felder in der Oberfläche vorausfüllen
UsernameBox.Text = user.Username;
AbteilungBox.Text = user.Abteilung;
MitarbeiternummerBox.Text = user.Mitarbeiternummer;
// Hinweistext zum Passwortreset initial ausblenden (nur zur Sicherheit)
if (this.FindControl("ResetHinweisText") is { } resetText)
{
resetText.IsVisible = false;
}
}
///
/// Wird ausgeführt, wenn auf „Speichern“ geklickt wird.
/// Aktualisiert die Daten des Benutzers und schließt das Fenster mit Rückgabe.
///
private void SpeichernButton_Click(object? sender, RoutedEventArgs e)
{
UpdatedUser.Username = UsernameBox.Text ?? UpdatedUser.Username;
UpdatedUser.Abteilung = AbteilungBox.Text ?? UpdatedUser.Abteilung;
UpdatedUser.Mitarbeiternummer = MitarbeiternummerBox.Text ?? UpdatedUser.Mitarbeiternummer;
this.Close(UpdatedUser);
}
///
/// Wird ausgeführt, wenn auf „Abbrechen“ geklickt wird.
/// Fenster wird geschlossen, ohne Änderungen zurückzugeben.
///
private void AbbrechenButton_Click(object? sender, RoutedEventArgs e)
{
this.Close(null);
}
}