using Avalonia;
using Avalonia.Controls;
using Project_Periodensystem.Model;
using Project_Periodensystem.Controller;
namespace Project_Periodensystem.View
{
///
/// Hauptfenster der Avalonia-Anwendung - implementiert MVC-Pattern.
/// Koordiniert NavigationService und PeriodensystemController.
/// Löst zirkuläre Abhängigkeiten durch zweistufige Initialisierung.
///
public partial class MainWindow : Window
{
///
/// Hauptbereich für Seitenwechsel zwischen PeriodicTablePage, AboutPage, etc.
///
private ContentControl? mainContent;
///
/// Zentrale Geschäftslogik für Periodensystem-Daten und -Operationen
///
private readonly PeriodensystemController _dataController;
///
/// Service für Navigation zwischen verschiedenen Anwendungsseiten
///
private readonly NavigationService _navigationService;
///
/// Konstruktor - initialisiert Avalonia-Komponenten und MVC-Architektur
///
public MainWindow()
{
InitializeComponent(); // Avalonia UI initialisieren
mainContent = this.FindControl("MainContent");
// Zweistufige Initialisierung wegen zirkulärer Abhängigkeiten:
// 1. NavigationService mit MainWindow erstellen
_navigationService = new NavigationService(this);
// 2. Controller mit NavigationService erstellen
_dataController = new PeriodensystemController(_navigationService);
// 3. Controller an NavigationService zurückgeben (löst Zirkularität)
_navigationService.SetDataController(_dataController);
// Landing Page anzeigen
ShowLandingPage();
}
///
/// Zeigt die Landing Page an
///
public void ShowLandingPage()
{
if (mainContent != null)
{
var landingPage = new LandingPage();
landingPage.SetController(_dataController);
mainContent.Content = landingPage;
Logger.Log("Landing Page angezeigt (mit Interface-basierter Navigation)");
}
}
///
/// Cleanup beim Schließen
///
protected override void OnClosed(System.EventArgs e)
{
// NavigationService implementiert kein IDisposable mehr (keine Events)
base.OnClosed(e);
}
}
}