using System.Collections.Generic;
using System.Drawing;
using PolyTrader.Core.Modularity;

namespace PolyTraderSharp.Ui
{
    /// <summary>
    /// Löst die toolkit-neutralen <see cref="ModuleView.IconKey"/>-Schlüssel gegen die WinForms-
    /// Bildressourcen der App auf. Diese Zuordnung ist die einzige Stelle, an der Views und
    /// Bilddaten zusammenkommen – Core und Module kennen nur noch den Schlüssel als Zeichenkette.
    ///
    /// Die Avalonia-Shell bekommt später ein eigenes Gegenstück mit denselben Schlüsseln; die
    /// Registrierungen in Core und Modulen bleiben dabei unverändert.
    /// </summary>
    internal static class ViewIcons
    {
        /// <summary>Symbol-Schlüssel → Bildressource. Unbekannte Schlüssel liefern <c>null</c> (Text-only-Menüeintrag).</summary>
        private static readonly Dictionary<string, Image> Map = new()
        {
            ["dashboard"] = Properties.Resources.dashboard,
            ["settings"] = Properties.Resources.setting_tools,
            ["terminal"] = Properties.Resources.error_log,
            ["jobs"] = Properties.Resources.system_time,
            ["accounting"] = Properties.Resources.coins_in_hand,
            ["copytrading"] = Properties.Resources.cross_reference,
            ["resolutionfarming"] = Properties.Resources.file_start_workflow,
            ["supervisor"] = Properties.Resources.emotion_batman,
        };

        /// <summary>
        /// Standard-Symbolschlüssel je View-ID. Greift für Views, die selbst keinen
        /// <see cref="ModuleView.IconKey"/> setzen – u.a. die Modul-Fenster, die die App-Ressourcen
        /// nicht kennen. Ersetzt die frühere Icon-Zuweisung in <c>Program.AssignMenuIcons</c>.
        /// </summary>
        private static readonly Dictionary<string, string> DefaultKeyByViewId = new()
        {
            ["core.dashboard"] = "dashboard",
            ["core.settings"] = "settings",
            ["core.terminal"] = "terminal",
            ["core.jobs"] = "jobs",
            ["accounting.main"] = "accounting",
            ["copytrading.main"] = "copytrading",
            ["resolutionfarming.main"] = "resolutionfarming",
            ["supervisor.main"] = "supervisor",
        };

        /// <summary>Bildressource zum Schlüssel, oder <c>null</c> (kein Symbol / unbekannter Schlüssel).</summary>
        public static Image? Resolve(string? iconKey) =>
            iconKey != null && Map.TryGetValue(iconKey, out var img) ? img : null;

        /// <summary>
        /// Setzt bei allen registrierten Views den Standard-Symbolschlüssel, sofern noch keiner gesetzt ist.
        /// </summary>
        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;
        }
    }
}
