/**
 * Analytics Service (Firebase GA4)
 *
 * Servicio para tracking de eventos, page views y errores con Firebase Analytics.
 * Integra con el sistema de auth para user properties y respeta consent mode GDPR.
 */
import { Injector } from '@angular/core';
import { ValtechFirebaseConfig } from './types';
import { AnalyticsDebugEvent, AnalyticsEventName, AnalyticsEventParams, AnalyticsItem, ConsentSettings, ConsentState, UserProperties } from './analytics-types';
import * as i0 from "@angular/core";
/**
 * Servicio de Firebase Analytics (GA4).
 *
 * Proporciona tracking de eventos, page views, errores y métricas de performance.
 * Soporta GDPR Consent Mode y modo debug para desarrollo.
 *
 * @example
 * ```typescript
 * @Component({...})
 * export class ProductComponent {
 *   private analytics = inject(AnalyticsService);
 *
 *   onPurchase(product: Product) {
 *     this.analytics.logEvent('purchase', {
 *       transaction_id: order.id,
 *       value: order.total,
 *       currency: 'EUR'
 *     });
 *   }
 * }
 * ```
 */
export declare class AnalyticsService {
    private injector;
    private config;
    private platformId;
    private readonly _consentState;
    private readonly _isDebugMode;
    private readonly _debugHistory;
    /** Estado de consentimiento actual (readonly) */
    readonly consentState: import("@angular/core").Signal<ConsentState>;
    /** Indica si está en modo debug */
    readonly isDebugMode: import("@angular/core").Signal<boolean>;
    /** Indica si analytics está habilitado y funcionando */
    readonly isEnabled: import("@angular/core").Signal<boolean>;
    private readonly analyticsConfig;
    private readonly consentStorageKey;
    private readonly eventPrefix;
    private readonly samplingRate;
    constructor(injector: Injector, config: ValtechFirebaseConfig, platformId: Object);
    /**
     * Inicializa el servicio de analytics
     */
    private initializeAnalytics;
    /**
     * Obtiene la instancia de Analytics de forma perezosa.
     * Esto evita el error de APP_INITIALIZER de AngularFire.
     */
    private getAnalyticsInstance;
    /**
     * Verifica si Analytics está soportado
     */
    private isAnalyticsSupported;
    /**
     * Verifica si debe enviar el evento (sampling)
     */
    private shouldSample;
    /**
     * Registra un page view.
     * Normalmente se usa automáticamente via AnalyticsRouterTracker.
     *
     * @param pagePath - Ruta de la página (ej: '/products/123')
     * @param pageTitle - Título de la página (opcional)
     */
    logPageView(pagePath: string, pageTitle?: string): void;
    /**
     * Registra un screen view (para apps tipo SPA).
     *
     * @param screenName - Nombre del screen
     * @param screenClass - Clase del screen (opcional)
     */
    logScreenView(screenName: string, screenClass?: string): void;
    /**
     * Registra un evento tipado GA4.
     *
     * @param eventName - Nombre del evento (tipado)
     * @param params - Parámetros del evento (tipados según el nombre)
     *
     * @example
     * ```typescript
     * // Evento tipado con autocompletado
     * analytics.logEvent('add_to_cart', {
     *   item_id: '123',
     *   item_name: 'Producto',
     *   value: 99.99,
     *   currency: 'EUR'
     * });
     * ```
     */
    logEvent<T extends AnalyticsEventName>(eventName: T, params?: AnalyticsEventParams[T]): void;
    /**
     * Registra un evento custom con parámetros libres.
     * Usar cuando el evento no está en el catálogo tipado.
     *
     * @param eventName - Nombre del evento custom
     * @param params - Parámetros libres
     */
    logCustomEvent(eventName: string, params?: Record<string, unknown>): void;
    /**
     * Lógica común para enviar eventos
     */
    private trackEvent;
    /**
     * Registra vista de item
     */
    logViewItem(item: AnalyticsItem): void;
    /**
     * Registra agregar al carrito
     */
    logAddToCart(item: AnalyticsItem, quantity?: number): void;
    /**
     * Registra inicio de checkout
     */
    logBeginCheckout(items: AnalyticsItem[], value: number, currency?: string): void;
    /**
     * Registra compra completada
     */
    logPurchase(transactionId: string, items: AnalyticsItem[], value: number, currency?: string): void;
    /**
     * Setea el userId para asociar eventos con el usuario.
     * Llamado automáticamente si enableAuthIntegration=true.
     *
     * @param userId - ID del usuario o null para limpiar
     */
    setUserId(userId: string | null): void;
    /**
     * Setea propiedades del usuario para segmentación.
     *
     * @param properties - Propiedades key-value
     *
     * @example
     * ```typescript
     * analytics.setUserProperties({
     *   subscription_tier: 'premium',
     *   preferred_language: 'es'
     * });
     * ```
     */
    setUserProperties(properties: UserProperties | Record<string, string | number | boolean>): void;
    /**
     * Setea la organización activa (multi-tenant).
     * Llamado automáticamente si enableAuthIntegration=true.
     *
     * @param orgId - ID de la organización o null
     */
    setActiveOrganization(orgId: string | null): void;
    /**
     * Registra un error para tracking.
     * Integra automáticamente con Angular ErrorHandler si enableErrorTracking=true.
     *
     * @param error - Error o mensaje de error
     * @param context - Contexto adicional
     *
     * @example
     * ```typescript
     * try {
     *   await riskyOperation();
     * } catch (error) {
     *   analytics.logError(error, { context: 'checkout_flow' });
     * }
     * ```
     */
    logError(error: Error | string, context?: Record<string, string>): void;
    /**
     * Registra un error fatal (crash-level).
     */
    logFatalError(error: Error, context?: Record<string, string>): void;
    /**
     * Actualiza el estado de consentimiento del usuario.
     * Afecta qué datos se recolectan y envían.
     *
     * @param consent - Settings de consentimiento
     *
     * @example
     * ```typescript
     * // Usuario acepta todo
     * analytics.updateConsent({ analytics: true, advertising: true });
     *
     * // Usuario rechaza publicidad
     * analytics.updateConsent({ analytics: true, advertising: false });
     * ```
     */
    updateConsent(consent: ConsentSettings): void;
    /**
     * Deniega todo consentimiento.
     */
    denyAllConsent(): void;
    /**
     * Acepta todo consentimiento.
     */
    grantAllConsent(): void;
    /**
     * Obtiene el estado actual de consentimiento.
     */
    getConsentState(): ConsentState;
    /**
     * Aplica consent settings a gtag (GA4 Consent Mode v2)
     */
    private applyConsentToGtag;
    /**
     * Carga consent desde localStorage
     */
    private loadConsentFromStorage;
    /**
     * Guarda consent en localStorage
     */
    private saveConsentToStorage;
    /**
     * Registra una métrica de timing/performance.
     *
     * @param name - Nombre de la métrica
     * @param valueMs - Valor en milisegundos
     * @param params - Parámetros adicionales
     *
     * @example
     * ```typescript
     * const start = performance.now();
     * await loadData();
     * analytics.logTiming('data_load', performance.now() - start, {
     *   category: 'api',
     *   endpoint: '/products'
     * });
     * ```
     */
    logTiming(name: string, valueMs: number, params?: Record<string, string>): void;
    /**
     * Habilita/deshabilita modo debug.
     * En debug: logea eventos a consola además de enviarlos a Firebase.
     */
    setDebugMode(enabled: boolean): void;
    /**
     * Obtiene historial de eventos (solo en debug mode).
     * Útil para testing y desarrollo.
     */
    getDebugHistory(): AnalyticsDebugEvent[];
    /**
     * Limpia historial de debug.
     */
    clearDebugHistory(): void;
    /**
     * Agrega evento al historial de debug
     */
    private addToDebugHistory;
    static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsService>;
}
