import { SetMetadata } from '@nestjs/common';

export const REQUIRE_PRIVILEGIO_KEY = 'require_privilegio';

/**
 * Decorator a nivel privilegio (Fase 5 del refactor de seguridad). El guard
 * `PrivilegioGuard` resuelve el módulo y submódulo asociados al privilegio
 * a partir de la BD, valida la suscripción (módulo + submódulo, contemplando
 * addons y exclusiones per-empresa) y por último verifica que el usuario
 * tenga el privilegio asignado vía sus perfiles.
 *
 * Reemplaza progresivamente a `@RequirePermission(modulo, privilegio)`,
 * `@RequireModule(modulo)` y `@RequireSubmodulo(submodulo)`, evitando que el
 * código del controller declare módulo y submódulo redundantemente.
 *
 * @example
 * @RequirePrivilegio('VEN_FAC_FACTURA_ANULAR')
 * @Post(':id/anular')
 * anular(@Param('id') id: string) { ... }
 */
export const RequirePrivilegio = (codigo: string) =>
  SetMetadata(REQUIRE_PRIVILEGIO_KEY, codigo);
