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

namespace TakeoutSaaS.Application.Identity.Contracts;

/// <summary>
/// 管理端菜单节点 DTO。
/// </summary>
public sealed record MenuNodeDto
{
    /// <summary>
    /// 菜单名称。
    /// </summary>
    [JsonPropertyName("name")]
    public required string Name { get; init; }

    /// <summary>
    /// 路由路径（顶级以 / 开头，子级为相对路径）。
    /// </summary>
    [JsonPropertyName("path")]
    public required string Path { get; init; }

    /// <summary>
    /// 前端组件路径（基于 src/views，不含 .vue）。
    /// </summary>
    [JsonPropertyName("component")]
    public required string Component { get; init; }

    /// <summary>
    /// 前端渲染元数据。
    /// </summary>
    [JsonPropertyName("meta")]
    public required MenuMetaDto Meta { get; init; }

    /// <summary>
    /// 子菜单集合。
    /// </summary>
    [JsonPropertyName("children")]
    public IReadOnlyList<MenuNodeDto> Children { get; init; } = System.Array.Empty<MenuNodeDto>();

    /// <summary>
    /// 访问该菜单所需的任一权限（仅用于后端过滤，不序列化）。
    /// </summary>
    internal string[] RequiredPermissions { get; init; } = System.Array.Empty<string>();
}
