using Avalonia;
using Avalonia.Styling;

namespace ClawdDotNet.Desktop.Services;

/// <summary>
/// Hell/Dunkel umschalten — an genau einer Stelle.
///
/// <para>Die Farbwerte selbst stehen in <c>Styles/Theme.axaml</c> als
/// <c>ThemeDictionaries</c>. Hier wird nur umgelegt, welches der beiden Wörterbücher gilt;
/// jede Bindung mit <c>DynamicResource</c> zieht dann von allein nach. Deshalb gibt es
/// hier auch keine Liste von Steuerelementen, die nachgefärbt werden müssten — die wäre
/// beim nächsten neuen Bereich schon wieder unvollständig.</para>
/// </summary>
public static class ThemeManager
{
    /// <summary>Name in den Einstellungen, wenn dunkel gewählt ist.</summary>
    public const string DarkName = "Dark";

    /// <summary>Übersetzt den gespeicherten Namen; alles außer „Dark" gilt als hell.</summary>
    public static bool IsDarkName(string? name)
        => string.Equals(name, DarkName, StringComparison.OrdinalIgnoreCase);

    public static string ToName(bool isDark) => isDark ? DarkName : "Light";

    /// <summary>
    /// Legt die Variante an der Anwendung um. Ohne laufende Anwendung — etwa im
    /// Entwurfsmodus des Editors — passiert nichts.
    /// </summary>
    public static void Apply(bool isDark)
    {
        if (Application.Current is not { } app) return;
        app.RequestedThemeVariant = isDark ? ThemeVariant.Dark : ThemeVariant.Light;
    }
}
