using Avalonia.Media; using PolyTrader.App.Avalonia.Shell; namespace PolyTrader.App.Avalonia.ViewModels { /// /// Eine Zeile der Live-Ausgabe. Farbe wird beim Erzeugen festgelegt – die Zeile ist danach /// unveränderlich, was die Virtualisierung billig macht (kein Change-Tracking je Zeile). /// public sealed class LogLine { public string Text { get; init; } = string.Empty; public IBrush Brush { get; init; } = Brushes.White; } /// Anzeige-Zeile des Log Viewers (JSONL-Tagesdatei). public sealed class LogViewerRow { public string Time { get; init; } = string.Empty; public string Level { get; init; } = string.Empty; public string Cid { get; init; } = string.Empty; public string Message { get; init; } = string.Empty; } /// Wer im Supervisor-Verlauf spricht – bestimmt die Farbe der Kopfzeile. public enum ChatRole { User, Agent, Error } /// /// Ein Eintrag im Supervisor-Analyseverlauf. Speichert die ROLLE, nicht die Farbe – dadurch /// stimmt die Darstellung nach einem Themenwechsel ohne Neuaufbau der Liste. /// public sealed class ChatEntry { public string Header { get; init; } = string.Empty; public string Text { get; init; } = string.Empty; public ChatRole Role { get; init; } = ChatRole.User; public IBrush HeaderBrush => Role switch { ChatRole.Agent => ThemeManager.Brush("AppChatAgentBrush"), ChatRole.Error => ThemeManager.Brush("AppNegativeBrush"), _ => ThemeManager.Brush("AppChatUserBrush") }; } }