namespace ytLive.Models; public enum StreamStatus { Offline, Connecting, Streaming, Error } public class StreamConfig { public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public string StreamKey { get; set; } = string.Empty; public string IngestUrl { get; set; } = "rtmp://a.rtmp.youtube.com/live2"; public bool IsLowLatency { get; set; } = true; public int TargetBitrate { get; set; } = 6000; public int TargetFps { get; set; } = 60; public string Resolution { get; set; } = "1920x1080"; } public class StreamHealth { public StreamStatus Status { get; set; } public double CurrentBitrate { get; set; } public int DroppedFrames { get; set; } public double FPS { get; set; } public TimeSpan StreamDuration { get; set; } public string? LastError { get; set; } // YouTube-specific (liveStreams.status) public string? HealthStatus { get; set; } // "good", "ok", "bad", "noData" public string? HealthMessage { get; set; } // Report-by-exception (TASK 5 item 3): configurationIssues[] — the banner // surfaces only warning/error entries. public List ConfigurationIssues { get; } = new(); } public enum StreamIssueSeverity { Info, Warning, Error } public class StreamConfigurationIssue { public StreamIssueSeverity Severity { get; set; } public string? Type { get; set; } }