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")
};
}
}