using System.Globalization;
using Avalonia.Data.Converters;
using Avalonia.Layout;

namespace ClawdDotNet.Desktop.Converters;

/// <summary>
/// Richtet Sprechblasen aus: rechts fuer den Benutzer, links fuer den Agenten.
///
/// <para>Ausrichtung und nicht Farbe — deshalb ist ein Konverter hier richtig. Der
/// frueher danebenstehende ChatBubbleBrushConverter lieferte einen Pinsel mit festem
/// Farbwert und ueberlebte den Themenwechsel nicht; die Hinterlegung eigener Nachrichten
/// laeuft jetzt ueber die Stilklasse <c>card accent</c>.</para>
/// </summary>
public sealed class ChatAlignmentConverter : IValueConverter
{
    public static readonly ChatAlignmentConverter Instance = new();

    public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
        => value is true ? HorizontalAlignment.Right : HorizontalAlignment.Left;

    public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
        => throw new NotSupportedException("Nur zur Anzeige.");
}

/// <summary>
/// Prueft, ob ein Werkzeugname mit dem <c>ConverterParameter</c> uebereinstimmt.
/// Blendet im Werkzeug-Einstellungsbereich die passende Feldgruppe ein.
/// </summary>
public sealed class ToolMatchConverter : IValueConverter
{
    public static readonly ToolMatchConverter Instance = new();

    public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
        => value is string toolName && parameter is string targetTool
           && toolName.Equals(targetTool, StringComparison.OrdinalIgnoreCase);

    public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
        => throw new NotSupportedException("Nur zur Anzeige.");
}
