import { InterpretedError } from './interpret-error';
import * as i0 from "@angular/core";
/**
 * Key i18n fija de la librería para fallos de red. Las apps pueden definirla en
 * su contenido i18n (namespace `_global`) para personalizar el texto; si no
 * existe, se usa {@link NETWORK_FALLBACK_MESSAGE}.
 */
export declare const VALTECH_NETWORK_ERROR_KEY = "valtech.error.network";
/**
 * Opciones de {@link ValtechErrorService.handle}.
 */
export interface ValtechErrorHandleOptions {
    /**
     * Identificador del punto de fallo, ej. `'profile.save'`. Se incluye en el
     * log de consola y en el reporte a Analytics para facilitar el tracing.
     */
    context?: string;
    /**
     * Mapa `código de backend → key i18n`. Lo provee la app, que conoce sus
     * propias traducciones. Ej. `{ EMAIL_TAKEN: 'errors.emailTaken' }`.
     */
    i18nMap?: Record<string, string>;
    /**
     * Key i18n a usar cuando no hay match en `i18nMap` (y el error no es de red).
     * Si se omite, se usa un mensaje genérico en español.
     */
    fallbackKey?: string;
    /**
     * Namespace i18n para resolver `i18nMap` / `fallbackKey` / la key de red.
     * Default: `_global`.
     */
    i18nNamespace?: string;
    /** Si mostrar un toast con el mensaje resuelto. Default: `true`. */
    toast?: boolean;
}
/**
 * Servicio de UX de errores capturados (Capa 3 del estándar de manejo de errores).
 *
 * Mientras la Capa 1 ({@link errorLoggingInterceptor}) observa TODAS las
 * respuestas HTTP con error, y la Capa 2 (`AnalyticsErrorHandler`) captura los
 * errores NO manejados, la Capa 3 es el punto único que una página usa en su
 * `catch` para convertir un error en feedback al usuario.
 *
 * Responsabilidades de {@link handle}:
 * 1. Normaliza el error (`interpretError`).
 * 2. Loguea a consola + reporta a Analytics (`source: 'handled'`, con `context`).
 * 3. Resuelve un mensaje localizado (ver orden de resolución en {@link handle}).
 * 4. Muestra un toast (`color: 'dark'`, estándar Valtech) salvo `toast: false`.
 * 5. Devuelve el {@link InterpretedError} para que la página decida lógica extra.
 *
 * **Nunca lanza.** `AnalyticsService` se inyecta `@Optional()`.
 *
 * @example
 * ```ts
 * private errors = inject(ValtechErrorService);
 *
 * async save() {
 *   try {
 *     await firstValueFrom(this.api.updateProfile(this.form.value));
 *     this.toast.show({ message: 'Perfil actualizado', color: 'dark' });
 *   } catch (err) {
 *     this.errors.handle(err, {
 *       context: 'profile.save',
 *       i18nMap: { EMAIL_TAKEN: 'errors.emailTaken' },
 *       fallbackKey: 'errors.profileSaveFailed',
 *     });
 *   }
 * }
 * ```
 */
export declare class ValtechErrorService {
    private readonly i18n;
    private readonly toast;
    private readonly analytics;
    /**
     * Maneja un error capturado: normaliza, observa y produce feedback de usuario.
     *
     * Orden de resolución del mensaje del toast:
     * 1. `i18nMap[code]` definido → `i18n.t(esa key)`.
     * 2. Sin match y `isNetwork` → key de red ({@link VALTECH_NETWORK_ERROR_KEY}),
     *    con fallback al texto español si la app no la tradujo.
     * 3. `fallbackKey` definido → `i18n.t(fallbackKey)`.
     * 4. Genérico en español.
     *
     * @param err Cualquier error capturado.
     * @param opts Opciones de contexto, mapeo i18n y toast.
     * @returns El {@link InterpretedError} normalizado. Nunca lanza.
     */
    handle(err: unknown, opts?: ValtechErrorHandleOptions): InterpretedError;
    /**
     * Resuelve el mensaje a mostrar siguiendo el orden documentado en {@link handle}.
     */
    private resolveMessage;
    /**
     * Traduce una key i18n. Devuelve `null` si la key no está definida — el
     * `I18nService` devuelve un placeholder `[namespace.key]` para keys faltantes;
     * lo detectamos para poder caer a un fallback en lugar de mostrar el placeholder.
     */
    private translate;
    static ɵfac: i0.ɵɵFactoryDeclaration<ValtechErrorService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ValtechErrorService>;
}
