using CineBook.Data; using CineBook.Helpers; using CineBook.Models; using System.Windows; using System.Windows.Controls; namespace CineBook.Views; public partial class MovieListView : UserControl { private readonly Repository _repo; private Movie? _selected; public MovieListView(Repository repo) { InitializeComponent(); _repo = repo; // Nur Admins dürfen bearbeiten/löschen if (!Session.IsAdmin) { BtnAdd.IsEnabled = false; BtnAdd.Visibility = Visibility.Collapsed; BtnDelete.Visibility = Visibility.Collapsed; BtnEdit.Visibility = Visibility.Collapsed; } LoadMovies(); } private void LoadMovies() { try { MoviesGrid.ItemsSource = _repo.GetMovies(); StatusText.Text = $"● {_repo.GetMovies().Count} Filme geladen."; } catch (System.Exception ex) { StatusText.Text = "⚠ Fehler: " + ex.Message; } } private void GridSelectionChanged(object sender, SelectionChangedEventArgs e) { _selected = MoviesGrid.SelectedItem as Movie; BtnEdit.IsEnabled = _selected != null && Session.IsAdmin; BtnDelete.IsEnabled = _selected != null && Session.IsAdmin; } private void SearchChanged(object sender, TextChangedEventArgs e) { } private void SearchClick(object sender, RoutedEventArgs e) { var term = SearchBox.Text.Trim(); if (string.IsNullOrEmpty(term)) { LoadMovies(); return; } try { MoviesGrid.ItemsSource = _repo.SearchMovies(term); } catch (System.Exception ex) { StatusText.Text = "⚠ " + ex.Message; } } private void LoadAllClick(object sender, RoutedEventArgs e) { SearchBox.Text = ""; LoadMovies(); } private void AddClick(object sender, RoutedEventArgs e) { var dlg = new MovieEditDialog(null); if (dlg.ShowDialog() == true && dlg.Result != null) { try { if (_repo.CreateMovie(dlg.Result)) LoadMovies(); else MessageBox.Show("Fehler beim Speichern.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } catch (System.Exception ex) { MessageBox.Show("DB-Fehler: " + ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } } private void EditClick(object sender, RoutedEventArgs e) { if (_selected == null) return; var dlg = new MovieEditDialog(_selected); if (dlg.ShowDialog() == true && dlg.Result != null) { try { if (_repo.UpdateMovie(dlg.Result)) LoadMovies(); } catch (System.Exception ex) { MessageBox.Show("DB-Fehler: " + ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } } private void DeleteClick(object sender, RoutedEventArgs e) { if (_selected == null) return; var r = MessageBox.Show($"Film \"{_selected.Title}\" wirklich löschen?", "Bestätigung", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (r == MessageBoxResult.Yes) { try { _repo.DeleteMovie(_selected.MovieID); LoadMovies(); } catch (System.Exception ex) { MessageBox.Show("DB-Fehler: " + ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } } }