using Avalonia.Media;
using PolyTrader.App.Avalonia.Shell;

namespace PolyTrader.App.Avalonia.ViewModels
{
    /// <summary>
    /// 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).
    /// </summary>
    public sealed class LogLine
    {
        public string Text { get; init; } = string.Empty;
        public IBrush Brush { get; init; } = Brushes.White;
    }

    /// <summary>Anzeige-Zeile des Log Viewers (JSONL-Tagesdatei).</summary>
    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;
    }

    /// <summary>Wer im Supervisor-Verlauf spricht – bestimmt die Farbe der Kopfzeile.</summary>
    public enum ChatRole { User, Agent, Error }

    /// <summary>
    /// Ein Eintrag im Supervisor-Analyseverlauf. Speichert die ROLLE, nicht die Farbe – dadurch
    /// stimmt die Darstellung nach einem Themenwechsel ohne Neuaufbau der Liste.
    /// </summary>
    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")
        };
    }
}
