using System.Reflection;

namespace Hua.Todo.Avalonia.Services;

/// <summary>
/// 应用元信息工具类。
/// 负责生成窗口标题与托盘提示文本等展示字符串，避免在多处重复拼装并保持跨宿主一致性。
/// </summary>
public static class AppMetadata
{
    private const string AppNameText = "待办事项";

    /// <summary>
    /// 应用名称（不含版本）。
    /// </summary>
    public static string AppName => AppNameText;

    /// <summary>
    /// 获取显示版本号（主版本.次版本.修订版本）。
    /// 若无法解析版本信息则返回 null。
    /// </summary>
    public static string? GetDisplayVersion()
    {
        var asmVersion = Assembly.GetExecutingAssembly().GetName().Version;
        if (asmVersion == null)
        {
            return null;
        }

        return $"{asmVersion.Major}.{asmVersion.Minor}.{asmVersion.Build}";
    }

    /// <summary>
    /// 获取托盘/关于等场景使用的显示标题（可能包含版本）。
    /// </summary>
    public static string GetDisplayTitle()
    {
        var version = GetDisplayVersion();
        return string.IsNullOrWhiteSpace(version) ? AppName : $"{AppName} v{version}";
    }

    /// <summary>
    /// 获取窗口标题栏文本（可能包含版本）。
    /// </summary>
    public static string GetWindowTitle()
    {
        var version = GetDisplayVersion();
        return string.IsNullOrWhiteSpace(version) ? AppNameText : $"{AppNameText} v{version}";
    }

    /// <summary>
    /// 获取托盘 Tooltip 文本（部分平台对长度有限制）。
    /// </summary>
    public static string GetTrayTooltipText()
    {
        var text = GetDisplayTitle();
        return text.Length > 63 ? text[..63] : text;
    }
}

