using PetWashControl.Models; using PetWashControl.Services; using PetWashControl.ViewModels; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace PetWashControl.Views; public partial class MainWindow : Window { private readonly MainViewModel _viewModel; private readonly AdminAccessService _adminAccessService; private PackageManagementWindow? _packageManagementWindow; public MainWindow() { InitializeComponent(); _adminAccessService = new AdminAccessService(new ConfigurationService()); _viewModel = new MainViewModel(); _viewModel.ViewChanged += OnViewChanged; _viewModel.OpenPackageManagementRequested += OnOpenPackageManagementRequested; DataContext = _viewModel; Loaded += MainWindow_Loaded; } private async void MainWindow_Loaded(object sender, RoutedEventArgs e) { await _viewModel.InitializeAsync(); ConfigureSettingsButtons(); } private void OnViewChanged(string viewName) { IdleView.Visibility = Visibility.Collapsed; PaymentView.Visibility = Visibility.Collapsed; QRCodeView.Visibility = Visibility.Collapsed; WashingView.Visibility = Visibility.Collapsed; SettingsView.Visibility = Visibility.Collapsed; switch (viewName) { case "Idle": IdleView.Visibility = Visibility.Visible; break; case "Payment": PaymentView.Visibility = Visibility.Visible; break; case "QRCode": QRCodeView.Visibility = Visibility.Visible; break; case "Washing": WashingView.Visibility = Visibility.Visible; break; case "Settings": SettingsView.Visibility = Visibility.Visible; break; } } private void Package_Click(object sender, MouseButtonEventArgs e) { if (sender is FrameworkElement element && element.DataContext is Package package) { _viewModel.SelectPackageCommand.Execute(package); } } private void AdminHotspot_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (e.ClickCount < 2) { return; } var loginWindow = new AdminLoginWindow(_adminAccessService) { Owner = this }; var dialogResult = loginWindow.ShowDialog(); if (dialogResult == true && loginWindow.IsAuthenticated) { _viewModel.ShowSettingsFromAdmin(); } } private void OnOpenPackageManagementRequested() { if (_packageManagementWindow?.IsVisible == true) { _packageManagementWindow.Activate(); return; } _packageManagementWindow = new PackageManagementWindow(_viewModel) { Owner = this }; _packageManagementWindow.Closed += (_, _) => _packageManagementWindow = null; _packageManagementWindow.ShowDialog(); } private void ConfigureSettingsButtons() { foreach (var button in FindVisualChildren