using TakeoutSaaS.Domain.Identity.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;

namespace TakeoutSaaS.Domain.Identity.Entities;

/// <summary>
/// 管理端菜单定义（系统级数据，不按租户隔离）。
/// </summary>
public sealed class MenuDefinition : AuditableEntityBase
{
    /// <summary>
    /// 门户类型（Admin=平台端，Tenant=租户端）。
    /// </summary>
    public PortalType Portal { get; set; }
    /// <summary>
    /// 父级菜单 ID，根节点为 0。
    /// </summary>
    public long ParentId { get; set; }

    /// <summary>
    /// 菜单名称（前端路由 name）。
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 路由路径。
    /// </summary>
    public string Path { get; set; } = string.Empty;

    /// <summary>
    /// 组件路径（不含 .vue）。
    /// </summary>
    public string Component { get; set; } = string.Empty;

    /// <summary>
    /// 标题。
    /// </summary>
    public string Title { get; set; } = string.Empty;

    /// <summary>
    /// 图标标识。
    /// </summary>
    public string? Icon { get; set; }

    /// <summary>
    /// 是否 iframe。
    /// </summary>
    public bool IsIframe { get; set; }

    /// <summary>
    /// 外链或 iframe 地址。
    /// </summary>
    public string? Link { get; set; }

    /// <summary>
    /// 是否缓存。
    /// </summary>
    public bool KeepAlive { get; set; }

    /// <summary>
    /// 排序。
    /// </summary>
    public int SortOrder { get; set; }

    /// <summary>
    /// 访问该菜单所需的权限集合（逗号分隔）。
    /// </summary>
    public string RequiredPermissions { get; set; } = string.Empty;

    /// <summary>
    /// Meta.permissions（逗号分隔）。
    /// </summary>
    public string MetaPermissions { get; set; } = string.Empty;

    /// <summary>
    /// Meta.roles（逗号分隔）。
    /// </summary>
    public string MetaRoles { get; set; } = string.Empty;

    /// <summary>
    /// 按钮权限列表 JSON（存储 MenuAuthItemDto 数组）。
    /// </summary>
    public string? AuthListJson { get; set; }
}
