namespace SIGCM2.Domain.Entities;

/// <summary>
/// Entidad de dominio que representa un permiso atómico del catálogo RBAC.
/// Inmutable — solo se puede leer desde BD (sin creación por API).
/// </summary>
public sealed class Permiso
{
    public int Id { get; }
    public string Codigo { get; }
    public string Nombre { get; }
    public string? Descripcion { get; }
    public string Modulo { get; }
    public bool Activo { get; }
    public DateTime FechaCreacion { get; }

    private Permiso(
        int id,
        string codigo,
        string nombre,
        string? descripcion,
        string modulo,
        bool activo,
        DateTime fechaCreacion)
    {
        Id = id;
        Codigo = codigo;
        Nombre = nombre;
        Descripcion = descripcion;
        Modulo = modulo;
        Activo = activo;
        FechaCreacion = fechaCreacion;
    }

    /// <summary>
    /// Factory para hidratación desde BD (read-only — el catálogo solo se modifica vía migraciones).
    /// </summary>
    public static Permiso ForRead(
        int id,
        string codigo,
        string nombre,
        string? descripcion,
        string modulo,
        bool activo,
        DateTime fechaCreacion)
    {
        return new Permiso(id, codigo, nombre, descripcion, modulo, activo, fechaCreacion);
    }
}
