using Avalonia.Controls; using LehrerApp.Core.Interfaces; using LehrerApp.Core.Models; using LehrerApp.Desktop.ViewModels.Groups; using Microsoft.Extensions.DependencyInjection; namespace LehrerApp.Desktop.Views.Groups; public partial class GroupDetailView : UserControl { public GroupDetailView() => InitializeComponent(); protected override void OnDataContextChanged(EventArgs e) { base.OnDataContextChanged(e); if (DataContext is GroupDetailViewModel vm) { vm.OnAddStudent = ShowAddStudentDialog; vm.OnAddExam = ShowAddExamDialog; vm.OnEditExam = ShowEditExamDialog; vm.OnDuplicateExam = ShowDuplicateExamDialog; vm.OnConfirmDeleteExam = ShowDeleteExamDialog; } } private async Task ShowAddStudentDialog() { if (DataContext is not GroupDetailViewModel vm || vm.Group is null) return false; var dialogVm = new AddStudentToGroupDialogViewModel( App.Services.GetRequiredService(), App.Services.GetRequiredService(), vm.Group.Id, vm.Group.SchoolYear); var dialog = new AddStudentToGroupDialog { DataContext = dialogVm }; var owner = TopLevel.GetTopLevel(this) as Window; if (owner is null) return false; return await dialog.ShowDialog(owner); } private Task ShowAddExamDialog(Guid groupId) => ShowExamDialog(groupId, editingExam: null, duplicateSource: null); private Task ShowEditExamDialog(Exam exam) => ShowExamDialog(exam.GroupId, editingExam: exam, duplicateSource: null); private Task ShowDuplicateExamDialog(Exam exam) => ShowExamDialog(exam.GroupId, editingExam: null, duplicateSource: exam); private async Task ShowExamDialog(Guid groupId, Exam? editingExam, Exam? duplicateSource) { if (DataContext is not GroupDetailViewModel vm || vm.Group is null) return false; var dialogVm = new ExamDialogViewModel( App.Services.GetRequiredService(), App.Services.GetRequiredService(), groupId, vm.Group.SubjectId, vm.Group.GradeLevel, vm.Group.GradingSystem, vm.Group.Subject ?? "", editingExam, duplicateSource); var dialog = new ExamDialog { DataContext = dialogVm }; var owner = TopLevel.GetTopLevel(this) as Window; if (owner is null) return false; return await dialog.ShowDialog(owner); } private async Task ShowDeleteExamDialog(ExamSummary exam) { var dialog = new DeleteExamDialog { DataContext = exam.Title }; var owner = TopLevel.GetTopLevel(this) as Window; return owner is not null && await dialog.ShowDialog(owner); } }