using Avalonia.Controls; using LehrerApp.Core.Interfaces; using LehrerApp.Core.Models; using LehrerApp.Desktop.ViewModels.Groups; using LehrerApp.Desktop.Views.Shared; using Microsoft.Extensions.DependencyInjection; namespace LehrerApp.Desktop.Views.Groups; public partial class PlanningTabView : UserControl { public PlanningTabView() => InitializeComponent(); protected override void OnDataContextChanged(EventArgs e) { base.OnDataContextChanged(e); if (DataContext is PlanningTabViewModel vm) { vm.OnAddUnit = groupId => ShowUnitDialog(groupId, editingUnit: null); vm.OnEditUnit = unit => ShowUnitDialog(unit.GroupId, editingUnit: unit); vm.OnConfirmDeleteUnit = ShowDeleteUnitDialog; vm.OnPickCopyTarget = ShowCopyUnitDialog; vm.OnAddLesson = (unitId, groupId, materials, shorthands) => ShowLessonDialog(unitId, groupId, materials, shorthands, editingLesson: null); vm.OnEditLesson = (lesson, materials, shorthands) => ShowLessonDialog(lesson.UnitId, lesson.GroupId, materials, shorthands, editingLesson: lesson); vm.OnConfirmDeleteLesson = ShowDeleteLessonDialog; vm.OnPickMoveTarget = ShowMoveLessonDialog; } } private async Task ShowUnitDialog(Guid groupId, Unit? editingUnit) { if (DataContext is not PlanningTabViewModel vm) return false; var dialogVm = new UnitDialogViewModel( App.Services.GetRequiredService(), App.Services.GetRequiredService(), groupId, vm.SubjectId, vm.GradeLevel, vm.SubjectName, editingUnit); var dialog = new UnitDialog { DataContext = dialogVm }; var owner = TopLevel.GetTopLevel(this) as Window; if (owner is null) return false; var ok = await dialog.ShowDialog(owner); return ok && dialogVm.Result is not null; } private async Task ShowDeleteUnitDialog(UnitSummary unit) { var info = new ConfirmDialogInfo { Title = "Einheit löschen?", Message = $"\"{unit.Title}\" wird inkl. aller zugehörigen Stunden endgültig gelöscht.", ConfirmText = "Löschen", }; var dialog = new ConfirmDialog { DataContext = info }; var owner = TopLevel.GetTopLevel(this) as Window; return owner is not null && await dialog.ShowDialog(owner); } private async Task ShowCopyUnitDialog(Unit unit) { var dialogVm = new CopyUnitDialogViewModel( App.Services.GetRequiredService(), unit.GroupId); var dialog = new CopyUnitDialog { DataContext = dialogVm }; var owner = TopLevel.GetTopLevel(this) as Window; if (owner is null) return null; var ok = await dialog.ShowDialog(owner); return ok ? dialogVm.Result : null; } private async Task ShowLessonDialog(Guid unitId, Guid groupId, List materialSuggestions, List shorthandHistorySuggestions, Lesson? editingLesson) { var dialogVm = new LessonDialogViewModel( App.Services.GetRequiredService(), App.Services.GetRequiredService(), unitId, groupId, materialSuggestions, shorthandHistorySuggestions, editingLesson); var dialog = new LessonDialog { DataContext = dialogVm }; var owner = TopLevel.GetTopLevel(this) as Window; if (owner is null) return false; var ok = await dialog.ShowDialog(owner); return ok && dialogVm.Result is not null; } private async Task ShowDeleteLessonDialog(LessonSummary lesson) { var info = new ConfirmDialogInfo { Title = "Stunde löschen?", Message = $"Die Stunde vom {lesson.DateDisplay} wird endgültig gelöscht.", ConfirmText = "Löschen", }; var dialog = new ConfirmDialog { DataContext = info }; var owner = TopLevel.GetTopLevel(this) as Window; return owner is not null && await dialog.ShowDialog(owner); } private async Task ShowMoveLessonDialog(Lesson lesson) { var dialogVm = new MoveLessonDialogViewModel(lesson.Date); var dialog = new MoveLessonDialog { DataContext = dialogVm }; var owner = TopLevel.GetTopLevel(this) as Window; if (owner is null) return null; var ok = await dialog.ShowDialog(owner); return ok ? dialogVm.Result : null; } }