using Avalonia.Controls; using LehrerApp.Core.Interfaces; using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Desktop.ViewModels.Workload; using Microsoft.Extensions.DependencyInjection; namespace LehrerApp.Desktop.Views.Workload; /// Gemeinsamer Aufruf des Aufgaben-Dialogs für alle drei Entry-Points (Aufgabenliste, /// Kurs-Dashboard, Hauptdashboard) — vermeidet drei fast identische Kopien der Gruppen-/ /// Kursliste-Ladelogik. public static class WorkTaskDialogHelper { public static async Task ShowDialog(Window owner, WorkTask? source = null, bool startAsReminder = false, Guid? preselectedGroupId = null) { var groups = App.Services.GetRequiredService().GetAll(includeInactive: true); var vm = new AddEditWorkTaskDialogViewModel(source, groups, startAsReminder, LoadActiveRoster); if (source is null && preselectedGroupId is { } groupId) vm.SelectedGroup = groups.FirstOrDefault(g => g.Id == groupId); var dialog = new AddEditWorkTaskDialog { DataContext = vm }; await dialog.ShowDialog(owner); return vm.Result; } // "Aus Kursliste befüllen" (Nutzer-Feedback): nur aktuell aktive Mitglieder, wie überall sonst // im Dashboard/Übersicht-Tab (GroupMembershipService.IsActiveOn). private static List<(Guid StudentId, string Name)> LoadActiveRoster(Guid groupId) { var memberships = App.Services.GetRequiredService(); var students = App.Services.GetRequiredService(); var today = DateOnly.FromDateTime(DateTime.Today); return memberships.GetByGroup(groupId) .Where(m => GroupMembershipService.IsActiveOn(m, today)) .Select(m => students.GetById(m.StudentId)) .Where(s => s is not null) .Select(s => (s!.Id, s.FullName)) .ToList(); } }