using System.Diagnostics.CodeAnalysis;
using StabilityMatrix.Avalonia.Models;
using StabilityMatrix.Avalonia.Models.TagCompletion;
using StabilityMatrix.Avalonia.Styles;

namespace StabilityMatrix.Avalonia.Controls.CodeCompletion;

[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")]
public static class CompletionIcons
{
    public static readonly IconData General =
        new() { FAIcon = "fa-solid fa-star-of-life", Foreground = ThemeColors.LightSteelBlue, };

    public static readonly IconData Artist =
        new() { FAIcon = "fa-solid fa-palette", Foreground = ThemeColors.AmericanYellow, };

    public static readonly IconData Character =
        new() { FAIcon = "fa-solid fa-user", Foreground = ThemeColors.LuminousGreen, };

    public static readonly IconData Copyright =
        new() { FAIcon = "fa-solid fa-copyright", Foreground = ThemeColors.DeepMagenta, };

    public static readonly IconData Species =
        new()
        {
            FAIcon = "fa-solid fa-dragon",
            FontSize = 14,
            Foreground = ThemeColors.HalloweenOrange,
        };

    public static readonly IconData Invalid =
        new()
        {
            FAIcon = "fa-solid fa-question",
            Foreground = ThemeColors.CompletionForegroundBrush,
        };

    public static readonly IconData Keyword =
        new() { FAIcon = "fa-solid fa-key", Foreground = ThemeColors.CompletionForegroundBrush, };

    public static readonly IconData Model =
        new() { FAIcon = "fa-solid fa-cube", Foreground = ThemeColors.CompletionForegroundBrush, };

    public static readonly IconData ModelType =
        new() { FAIcon = "fa-solid fa-shapes", Foreground = ThemeColors.BrilliantAzure, };

    public static IconData? GetIconForTagType(TagType tagType)
    {
        return tagType switch
        {
            TagType.General => General,
            TagType.Artist => Artist,
            TagType.Character => Character,
            TagType.Species => Species,
            TagType.Invalid => Invalid,
            TagType.Copyright => Copyright,
            _ => null
        };
    }
}
