112 lines
3.9 KiB
C#
112 lines
3.9 KiB
C#
using System;
|
||
using Avalonia.Controls;
|
||
using Avalonia.Interactivity;
|
||
using ChronoFlow.Model;
|
||
using ChronoFlow.Persistence;
|
||
using ChronoFlow.View.Admin;
|
||
using ChronoFlow.View.Mitarbeiter;
|
||
|
||
namespace ChronoFlow.View;
|
||
|
||
/// <summary>
|
||
/// Hauptfenster der Anwendung – je nach Benutzerrolle wird die passende Startansicht geladen.
|
||
/// </summary>
|
||
public partial class MainWindow : Window
|
||
{
|
||
private readonly ViewManager _viewManager;
|
||
private readonly User _loggedInUser;
|
||
|
||
/// <summary>
|
||
/// Parameterloser Konstruktor – erforderlich für Avalonia Runtime Loader.
|
||
/// Startet mit einem Dummy-Nutzer (Demo-Zwecke oder Designer-Unterstützung).
|
||
/// </summary>
|
||
public MainWindow() : this(new User
|
||
{
|
||
Username = "DemoUser",
|
||
Role = "Mitarbeiter"
|
||
})
|
||
{
|
||
Console.WriteLine("⚠ Achtung: MainWindow ohne echten Benutzer gestartet (Demo-Modus).");
|
||
}
|
||
|
||
/// <summary>
|
||
/// Konstruktor – bekommt den eingeloggten Benutzer übergeben.
|
||
/// Registriert alle möglichen Views und zeigt die Startansicht je nach Rolle.
|
||
/// </summary>
|
||
public MainWindow(User user)
|
||
{
|
||
InitializeComponent();
|
||
|
||
_loggedInUser = user;
|
||
Console.WriteLine($"[DEBUG] MainWindow gestartet für Benutzer: {_loggedInUser.Username} ({_loggedInUser.Role})");
|
||
|
||
// Initialisierung des ViewManagers mit der ContentArea (wird in XAML gesetzt)
|
||
_viewManager = new ViewManager(ContentArea);
|
||
|
||
// 🔄 Registrierung aller Views, die im Projekt vorkommen
|
||
_viewManager.Register("ProjektErstellen", () => new ProjektErstellenView(_viewManager));
|
||
_viewManager.Register("MitarbeiterHinzufuegen", () => new MitarbeiterHinzufuegenView());
|
||
_viewManager.Register("AdminMain", () => new AdminMainView(_viewManager));
|
||
_viewManager.Register("AlleProjekte", () => new AlleProjekteView(_viewManager));
|
||
_viewManager.Register("MitarbeiterListe", () => new MitarbeiterListeView(_viewManager));
|
||
_viewManager.Register("AbgeschlosseneProjekte", () => new AbgeschlosseneProjekteView(_viewManager));
|
||
_viewManager.Register("Zeiterfassung", () => new EmployeeTasksView(_loggedInUser, new SqliteZeiterfassungsService()));
|
||
|
||
// 🧭 Starte mit der passenden Ansicht je nach Rolle
|
||
if (_loggedInUser.Role == "Admin")
|
||
{
|
||
_viewManager.Show("AdminMain");
|
||
}
|
||
else if (_loggedInUser.Role == "Mitarbeiter")
|
||
{
|
||
_viewManager.Show("Zeiterfassung");
|
||
}
|
||
|
||
// 🖼️ Fenster-Titel setzen (optional für Nutzerfreundlichkeit)
|
||
this.Title = $"ChronoFlow - Willkommen {_loggedInUser.Username} ({_loggedInUser.Role})";
|
||
}
|
||
|
||
/// <summary>
|
||
/// Öffnet die Mitarbeiter-Zeiterfassung (nur für Mitarbeiter-Sidebar-Button).
|
||
/// </summary>
|
||
private void Zeiterfassung_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
_viewManager.Show("Zeiterfassung");
|
||
}
|
||
|
||
/// <summary>
|
||
/// Öffnet das Formular zum Anlegen eines neuen Mitarbeiters.
|
||
/// </summary>
|
||
private void MitarbeiterHinzufuegen_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
_viewManager.Show("MitarbeiterHinzufuegen");
|
||
}
|
||
|
||
/// <summary>
|
||
/// Öffnet das Admin-Dashboard (Übersicht).
|
||
/// </summary>
|
||
private void AdminDashboard_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
_viewManager.Show("AdminMain");
|
||
}
|
||
|
||
/// <summary>
|
||
/// Extern aufrufbar für "Zurück zum Dashboard"-Funktion (z.B. in anderen Views).
|
||
/// </summary>
|
||
public void ShowAdminDashboard()
|
||
{
|
||
_viewManager.Show("AdminMain");
|
||
}
|
||
|
||
/// <summary>
|
||
/// Führt einen Logout durch – öffnet das Loginfenster neu und schließt sich selbst.
|
||
/// </summary>
|
||
private void Logout_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
var loginWindow = new LoginWindow();
|
||
loginWindow.Show();
|
||
|
||
this.Close(); // Schließt das aktuelle Fenster
|
||
}
|
||
}
|