using System.Text.Json.Serialization;

namespace PersonalToolBox.Models;

/// <summary>
/// 工具项模型，表示用户添加的一个可执行工具
/// </summary>
public class ToolItem
{
    /// <summary>
    /// 工具唯一标识 (UUID)
    /// </summary>
    public string Id { get; set; } = Guid.NewGuid().ToString();

    /// <summary>
    /// 工具显示名称
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 内置图标库的图标枚举名称（如 "Github", "Wrench"），用于 FontAwesome 图标渲染
    /// </summary>
    public string IconCode { get; set; } = string.Empty;

    /// <summary>
    /// 可执行文件路径或 URL
    /// </summary>
    public string ExecutablePath { get; set; } = string.Empty;

    /// <summary>
    /// 运行参数（选填）
    /// </summary>
    public string Arguments { get; set; } = string.Empty;

    /// <summary>
    /// 所属分类 ID
    /// </summary>
    public string CategoryId { get; set; } = string.Empty;

    /// <summary>
    /// 全局快捷键（如 Ctrl+Alt+T），选填
    /// </summary>
    public string HotKey { get; set; } = string.Empty;

    /// <summary>
    /// 路径是否有效（仅运行时计算，不存入 JSON）
    /// </summary>
    [JsonIgnore]
    public bool IsValid { get; set; } = true;

    /// <summary>
    /// 是否为组合卡片（一键多开）
    /// </summary>
    public bool IsGroup { get; set; }

    /// <summary>
    /// 当 IsGroup 为 true 时，存储需批量启动的子工具 ID 列表
    /// </summary>
    public List<string> SubToolIds { get; set; } = new();

    /// <summary>
    /// 是否在软件启动时自动运行
    /// </summary>
    public bool AutoRunOnStart { get; set; }

    /// <summary>
    /// 路径是否指向 .exe 文件（仅运行时判断，不存入 JSON）
    /// </summary>
    [JsonIgnore]
    public bool IsExePath =>
        !IsGroup && !string.IsNullOrWhiteSpace(ExecutablePath) &&
        ExecutablePath.EndsWith(".exe", StringComparison.OrdinalIgnoreCase);
}
