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;
///
/// Hauptfenster der Anwendung – je nach Benutzerrolle wird die passende Startansicht geladen.
///
public partial class MainWindow : Window
{
private readonly ViewManager _viewManager;
private readonly User _loggedInUser;
///
/// Parameterloser Konstruktor – erforderlich für Avalonia Runtime Loader.
/// Startet mit einem Dummy-Nutzer (Demo-Zwecke oder Designer-Unterstützung).
///
public MainWindow() : this(new User
{
Username = "DemoUser",
Role = "Mitarbeiter"
})
{
Console.WriteLine("⚠ Achtung: MainWindow ohne echten Benutzer gestartet (Demo-Modus).");
}
///
/// Konstruktor – bekommt den eingeloggten Benutzer übergeben.
/// Registriert alle möglichen Views und zeigt die Startansicht je nach Rolle.
///
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})";
}
///
/// Öffnet die Mitarbeiter-Zeiterfassung (nur für Mitarbeiter-Sidebar-Button).
///
private void Zeiterfassung_Click(object? sender, RoutedEventArgs e)
{
_viewManager.Show("Zeiterfassung");
}
///
/// Öffnet das Formular zum Anlegen eines neuen Mitarbeiters.
///
private void MitarbeiterHinzufuegen_Click(object? sender, RoutedEventArgs e)
{
_viewManager.Show("MitarbeiterHinzufuegen");
}
///
/// Öffnet das Admin-Dashboard (Übersicht).
///
private void AdminDashboard_Click(object? sender, RoutedEventArgs e)
{
_viewManager.Show("AdminMain");
}
///
/// Extern aufrufbar für "Zurück zum Dashboard"-Funktion (z.B. in anderen Views).
///
public void ShowAdminDashboard()
{
_viewManager.Show("AdminMain");
}
///
/// Führt einen Logout durch – öffnet das Loginfenster neu und schließt sich selbst.
///
private void Logout_Click(object? sender, RoutedEventArgs e)
{
var loginWindow = new LoginWindow();
loginWindow.Show();
this.Close(); // Schließt das aktuelle Fenster
}
}