namespace SIGCM2.Domain.Permissions;

/// <summary>
/// Catálogo canónico de permisos RBAC del sistema.
/// Source of truth: cada código aquí debe tener su fila en dbo.Permiso vía migración.
/// Convención: al agregar un permiso nuevo → también asignarlo al rol admin en la misma migración.
/// </summary>
public static class Permiso
{
    // ── Ventas: contado ──────────────────────────────────────────────────────
    public const string VentasContadoCrear = "ventas:contado:crear";
    public const string VentasContadoModificar = "ventas:contado:modificar";
    public const string VentasContadoCobrar = "ventas:contado:cobrar";
    public const string VentasContadoFacturar = "ventas:contado:facturar";

    // ── Ventas: cuenta corriente ─────────────────────────────────────────────
    public const string VentasCtacteCrear = "ventas:ctacte:crear";
    public const string VentasCtacteFacturar = "ventas:ctacte:facturar";

    // ── Textos ───────────────────────────────────────────────────────────────
    public const string TextosEditar = "textos:editar";
    public const string TextosReclamosVer = "textos:reclamos:ver";

    // ── Pauta ────────────────────────────────────────────────────────────────
    public const string PautaAzanuVer = "pauta:azanu:ver";
    public const string PautaLimpiar = "pauta:limpiar";
    public const string PautaRecursosFueraDeHora = "pauta:recursos:fueradehora";

    // ── Productores ──────────────────────────────────────────────────────────
    public const string ProductoresDeudaVer = "productores:deuda:ver";
    public const string ProductoresPendientesCrear = "productores:pendientes:crear";
    public const string ProductoresDeudaBypass = "productores:deuda:bypass";

    // ── Administración ───────────────────────────────────────────────────────
    public const string AdministracionUsuariosGestionar = "administracion:usuarios:gestionar";
    public const string AdministracionTarifariosGestionar = "administracion:tarifarios:gestionar";
    public const string AdministracionMediosGestionar = "administracion:medios:gestionar";
    public const string AdministracionAuditoriaVer = "administracion:auditoria:ver";
    public const string AdministracionFiscalGestionar = "administracion:fiscal:gestionar";

    /// <summary>
    /// Set completo de todos los códigos canónicos (útil para validación y seeds).
    /// </summary>
    public static readonly IReadOnlySet<string> Todos = new HashSet<string>
    {
        VentasContadoCrear, VentasContadoModificar, VentasContadoCobrar, VentasContadoFacturar,
        VentasCtacteCrear, VentasCtacteFacturar,
        TextosEditar, TextosReclamosVer,
        PautaAzanuVer, PautaLimpiar, PautaRecursosFueraDeHora,
        ProductoresDeudaVer, ProductoresPendientesCrear, ProductoresDeudaBypass,
        AdministracionUsuariosGestionar, AdministracionTarifariosGestionar,
        AdministracionMediosGestionar, AdministracionAuditoriaVer,
        AdministracionFiscalGestionar,
    };
}
