using Lada.Framework.Data.Domains.BaseEntities;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Identity
{
    /// <summary>
    /// Permission Group - tập hợp các Role để gán cho User
    /// Ví dụ: "Admin Permission", "HR Permission", "Driver Permission"
    /// </summary>
    public class Permission : BaseEntityWithKey<int>
    {
        /// <summary>
        /// Tên Permission Group
        /// Ví dụ: "Admin Permission", "HR Manager", "Sales Staff"
        /// </summary>
        [MaxLength(256)]
        public string Name { get; set; } = string.Empty;

        /// <summary>
        /// Mô tả Permission Group
        /// </summary>
        [MaxLength(512)]
        public string? Description { get; set; }

        /// <summary>
        /// Permission có đang hoạt động không
        /// </summary>
        public bool IsActive { get; set; } = true;

        /// <summary>
        /// Quan hệ nhiều-nhiều với Role thông qua PermissionRole
        /// </summary>
        public virtual ICollection<PermissionRole> PermissionRoles { get; set; } = new List<PermissionRole>();

        /// <summary>
        /// Danh sách User được gán Permission này
        /// </summary>
        public virtual ICollection<User> Users { get; set; } = new List<User>();
    }

    /// <summary>
    /// Bảng trung gian nhiều-nhiều giữa Permission và Role
    /// </summary>
    public class PermissionRole : BaseEntity
    {
        /// <summary>
        /// ID của Permission
        /// </summary>
        public int PermissionId { get; set; }

        /// <summary>
        /// ID của Role
        /// </summary>
        public int RoleId { get; set; }

        /// <summary>
        /// Navigation property đến Permission
        /// </summary>
        public virtual Permission Permission { get; set; } = null!;

        /// <summary>
        /// Navigation property đến Role
        /// </summary>
        public virtual Role Role { get; set; } = null!;
    }
}
