using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using PolyTrader.Core.Modularity;
namespace PolyTrader.App.Avalonia.Shell
{
///
/// Löst die toolkit-neutralen -Schlüssel gegen die
/// Avalonia-Bildressourcen auf. Gegenstück zum gleichnamigen Helfer der WinForms-Shell –
/// dieselben Schlüssel, dieselben PNG-Dateien, sodass Core und Module unverändert bleiben.
///
public static class ViewIcons
{
/// Symbol-Schlüssel → Dateiname in Resources/ (als Avalonia-Asset eingebettet).
private static readonly Dictionary FileByKey = new()
{
["start"] = "dashboard.png",
["dashboard"] = "token_quantifier.png",
["settings"] = "setting_tools.png",
["terminal"] = "error_log.png",
["jobs"] = "system_time.png",
["accounting"] = "coins_in_hand.png",
["copytrading"] = "cross_reference.png",
["resolutionfarming"] = "file_start_workflow.png",
["supervisor"] = "emotion_batman.png",
};
/// Standard-Symbolschlüssel je View-ID – identisch zur WinForms-Shell.
private static readonly Dictionary DefaultKeyByViewId = new()
{
[AvaloniaUiHost.StartViewId] = "start",
["core.dashboard"] = "dashboard",
["core.settings"] = "settings",
["core.terminal"] = "terminal",
["core.jobs"] = "jobs",
["accounting.main"] = "accounting",
["copytrading.main"] = "copytrading",
["resolutionfarming.main"] = "resolutionfarming",
["supervisor.main"] = "supervisor",
};
private static readonly ConcurrentDictionary Cache = new();
/// Bild zum Schlüssel, oder null (kein Symbol / Datei fehlt).
public static Bitmap? Resolve(string? iconKey)
{
if (iconKey == null || !FileByKey.TryGetValue(iconKey, out var file)) return null;
return Cache.GetOrAdd(iconKey, _ =>
{
try
{
var uri = new Uri($"avares://PolyTrader.App.Avalonia/Assets/{file}");
using var stream = AssetLoader.Open(uri);
return new Bitmap(stream);
}
catch
{
// Ein fehlendes Symbol darf die Oberflaeche nie aufhalten – Menueeintrag bleibt Text-only.
return null;
}
});
}
/// Setzt bei allen registrierten Views den Standard-Symbolschlüssel, falls noch keiner gesetzt ist.
public static void AssignDefaults(IModuleUiHost uiHost)
{
foreach (var view in uiHost.Views)
if (view.IconKey == null && DefaultKeyByViewId.TryGetValue(view.Id, out var key))
view.IconKey = key;
}
}
}