using System.Text.Json; namespace LehrerApp.Core.Services; public class PeriodTimeEntry { public int PeriodNumber { get; set; } public TimeOnly Start { get; set; } public TimeOnly End { get; set; } } internal class PeriodScheduleConfig { public List Periods { get; set; } = []; } /// /// Uhrzeiten der Einzelstunden (Stundenraster) — Grundlage für die Zeitbedarf-Rückmeldung im /// Verlaufsplan-Editor (4.2.2 Nachtrag). Nicht jede Schule/Stunde muss konfiguriert sein: fehlt /// eine Stunde, liefert 0 statt eines Standardwerts — die /// Zeitbedarf-Anzeige blendet sich dann einfach aus, statt eine erfundene Dauer vorzutäuschen. /// public class PeriodScheduleService { private readonly string _configPath; private PeriodScheduleConfig _config; public IReadOnlyList Periods => _config.Periods; public PeriodScheduleService(string appDataPath) { _configPath = Path.Combine(appDataPath, "periodschedule.json"); _config = Load(); } public void SetPeriods(List periods) { _config.Periods = periods; File.WriteAllText(_configPath, JsonSerializer.Serialize(_config)); } public (TimeOnly Start, TimeOnly End)? GetTimes(int periodNumber) { var entry = _config.Periods.FirstOrDefault(p => p.PeriodNumber == periodNumber); return entry is null ? null : (entry.Start, entry.End); } public int GetDurationMinutes(int periodNumber) => GetTimes(periodNumber) is { } t ? (int)(t.End - t.Start).TotalMinutes : 0; private PeriodScheduleConfig Load() { try { if (File.Exists(_configPath)) return JsonSerializer.Deserialize(File.ReadAllText(_configPath)) ?? new PeriodScheduleConfig(); } catch { /* beschädigte Konfiguration -> Standardwert */ } return new PeriodScheduleConfig(); } }