import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { ValtechAuthConfig } from '../auth/types';
import * as i0 from "@angular/core";
export type PermissionScope = 'app' | 'org' | 'internal';
/** Etiqueta legible por idioma (es/en). El backend es autoritativo (ADR-024). */
export type LocalizedLabel = Record<string, string>;
export interface PermissionResource {
    resource: string;
    scope: PermissionScope;
    appId?: string;
    actions: string[];
    /** Nombre legible del recurso (es/en), provisto por el backend. */
    label?: LocalizedLabel;
}
export interface PermissionCatalogResponse {
    operationId: string;
    appId: string;
    permissions: PermissionResource[];
    /** Nombre legible (es/en) por acción, transversal a los recursos. */
    actionLabels?: Record<string, LocalizedLabel>;
}
/**
 * Consume el catálogo de permisos del backend (`GET /org/{orgId}/permissions-catalog`).
 * El backend es la fuente de verdad de qué permisos existen y de su alcance
 * (globales de plataforma vs. propios de una app). La respuesta incluye el
 * `appId` del request para que la vista distinga la app actual.
 *
 * Promovido desde `showcase` a la lib bajo el proceso de ADR-021. Usa
 * `VALTECH_AUTH_CONFIG.apiUrl` (como `OrgService`) en vez del `environment` de la
 * app — la lib no importa el environment del consumer.
 */
export declare class PermissionCatalogService {
    private config;
    private http;
    constructor(config: ValtechAuthConfig, http: HttpClient);
    getCatalog(orgId: string): Observable<PermissionCatalogResponse>;
    static ɵfac: i0.ɵɵFactoryDeclaration<PermissionCatalogService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<PermissionCatalogService>;
}
/** Función que resuelve un permiso `resource:action` a su label legible. */
export type PermissionLabeler = (perm: string) => string;
/**
 * Construye el resolvedor de labels de permisos a partir del catálogo del backend
 * (fuente única de verdad de los labels, ADR-024). Los consumers (permissions-view,
 * organization-view, member-detail-modal) usan esto en vez de duplicar mapas
 * hardcodeados `resource→key`/`action→key`.
 *
 * - Recurso → `permissions[].label[locale]`; acción → `actionLabels[action][locale]`.
 * - Wildcards (`*:*`, `resource:*`, `*`) usan `allLabel` (el catálogo no modela el
 *   comodín; el consumer pasa su string i18n, p.ej. "Todos los permisos").
 * - Fallback humanizado si el catálogo no trae label (evita salidas vacías como
 *   ": Gestionar" ante un recurso/acción nuevo aún sin etiqueta en el backend).
 */
export declare function createPermissionLabeler(catalog: Pick<PermissionCatalogResponse, 'permissions' | 'actionLabels'>, locale: string, opts?: {
    allLabel?: string;
}): PermissionLabeler;
