using System.Text.Json; public static class ScenarioLoader { private static readonly JsonSerializerOptions JsonOptions = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, ReadCommentHandling = JsonCommentHandling.Skip, AllowTrailingCommas = true }; public static ScenarioFile Load(string path) { if (!File.Exists(path)) throw new FileNotFoundException($"Scenario file not found: {path}"); var json = File.ReadAllText(path); var scenario = JsonSerializer.Deserialize(json, JsonOptions) ?? throw new InvalidOperationException($"Failed to deserialize: {path}"); return scenario with { Events = scenario.Events.OrderBy(e => e.OffsetMinutes).ToList() }; } }