Files
CineBook/Views/MainWindow.xaml.cs

97 lines
2.8 KiB
C#

using CineBook.Data;
using CineBook.Helpers;
using System.Windows;
using System.Windows.Controls;
namespace CineBook.Views;
public partial class MainWindow : Window
{
private readonly Repository _repo;
private Button? _activeNavBtn;
public MainWindow()
{
InitializeComponent();
if (!Session.IsLoggedIn)
{
// Schutz gegen NullReference, falls MainWindow direkt gestartet wird.
new LoginWindow().Show();
Close();
return;
}
var cs = DbConfig.GetConnectionString();
if (string.IsNullOrWhiteSpace(cs))
{
MessageBox.Show(
"DB-Verbindung nicht konfiguriert. Bitte setze 'CINEBOOK_CONNECTION_STRING'.",
"Konfiguration fehlt",
MessageBoxButton.OK,
MessageBoxImage.Error);
new LoginWindow().Show();
Close();
return;
}
var db = new Db(cs);
_repo = new Repository(db);
UserInfoText.Text = $"[ {Session.CurrentUser!.Username.ToUpper()} | {Session.CurrentUser!.Role.ToUpper()} ]";
if (Session.IsAdmin)
BtnAdmin.Visibility = Visibility.Visible;
SetStats();
Navigate("movies", BtnMovies);
}
private void NavClick(object sender, RoutedEventArgs e)
{
if (sender is Button btn)
Navigate(btn.Tag?.ToString() ?? "movies", btn);
}
private void Navigate(string view, Button btn)
{
if (_activeNavBtn != null)
_activeNavBtn.Style = (Style)Resources["NavButton"];
btn.Style = (Style)Resources["NavButtonActive"];
_activeNavBtn = btn;
MainContent.Content = view switch
{
"movies" => new MovieListView(_repo),
"screenings" => new ScreeningsView(_repo),
"bookings" => new BookingsView(_repo, Session.CurrentUser!),
"admin" => new AdminPanelView(_repo),
"mine" => new MyBookingsView(_repo, Session.CurrentUser!),
_ => new MovieListView(_repo)
};
}
private void LogoutClick(object sender, RoutedEventArgs e)
{
Session.Logout();
new LoginWindow().Show();
Close();
}
private void SetStats()
{
try
{
var (movies, screenings, bookings, users) = _repo.GetStats();
StatsText.Text = $"Filme: {movies} | Vorführungen: {screenings} | Buchungen: {bookings} | Benutzer: {users}";
DbStatusText.Text = "● DB VERBUNDEN";
DbStatusText.Foreground = System.Windows.Media.Brushes.LimeGreen;
}
catch
{
DbStatusText.Text = "● DB NICHT ERREICHBAR";
DbStatusText.Foreground = System.Windows.Media.Brushes.Red;
}
}
}