using System.Collections.Generic;
using System.Text.Json.Serialization;

namespace TakeoutSaaS.Application.Identity.Contracts;

/// <summary>
/// 菜单前端元数据。
/// </summary>
public sealed record MenuMetaDto
{
    /// <summary>
    /// 菜单标题（i18n key）。
    /// </summary>
    [JsonPropertyName("title")]
    public required string Title { get; init; }

    /// <summary>
    /// 图标标识。
    /// </summary>
    [JsonPropertyName("icon")]
    public string? Icon { get; init; }

    /// <summary>
    /// 是否缓存页面。
    /// </summary>
    [JsonPropertyName("keepAlive")]
    public bool KeepAlive { get; init; }

    /// <summary>
    /// 是否为 iframe 页面。
    /// </summary>
    [JsonPropertyName("isIframe")]
    public bool IsIframe { get; init; }

    /// <summary>
    /// 外链或 iframe 地址。
    /// </summary>
    [JsonPropertyName("link")]
    public string? Link { get; init; }

    /// <summary>
    /// 允许访问的角色编码集合。
    /// </summary>
    [JsonPropertyName("roles")]
    public string[] Roles { get; init; } = System.Array.Empty<string>();

    /// <summary>
    /// 按钮/操作级别权限。
    /// </summary>
    [JsonPropertyName("authList")]
    public IReadOnlyList<MenuAuthItemDto> AuthList { get; init; } = System.Array.Empty<MenuAuthItemDto>();

    /// <summary>
    /// 访问该菜单所需的权限编码集合（前端用于路由级鉴权）。
    /// </summary>
    [JsonPropertyName("permissions")]
    public string[] Permissions { get; init; } = System.Array.Empty<string>();
}
