import { AnalyticsMethod } from './constants';
import { Func } from '../../types';
/**
 * Wrapper around analytics data
 * between AnalyticsService and AnalyticsProvider
 */
export declare class AnalyticsMediator {
    method: any;
    args: any[];
    constructor(method: AnalyticsMethod, args?: any[]);
}
type AnalyticsProviderObject = {
    handle: (event: any) => void;
};
/**
 * Provides abstraction across analytics services
 */
export declare function useAnalytics({ analyticsProviders }?: {
    analyticsProviders?: never[] | undefined;
}): {
    setAnalyticsProviders: (analyticsProvidersParam: AnalyticsProviderObject[]) => void;
    trackInternal: (event: string, properties: {
        user_id: string;
    }) => void;
    dialogView: (name: string, additionalProperty?: null) => void;
    pageView: (pageName: string, force?: boolean) => void;
    identify: (userId: string, userData?: {}) => void;
    tabView: (name: string) => void;
    change: ({ element, property, value, isOptions, }: Omit<{
        event: string;
        label?: string | null | undefined;
        property?: string | null | undefined;
        value?: string | null | undefined;
        isOptions?: boolean | null | undefined;
    }, "label" | "event"> & {
        element: string;
    }) => void;
    reset: () => void;
    click: ({ label, property, value, }: Omit<{
        event: string;
        label?: string | null | undefined;
        property?: string | null | undefined;
        value?: string | null | undefined;
        isOptions?: boolean | null | undefined;
    }, "event" | "isOptions">) => void;
    track: ({ event, label, property, value, isOptions, }: {
        event: string;
        label?: string | null | undefined;
        property?: string | null | undefined;
        value?: string | null | undefined;
        isOptions?: boolean | null | undefined;
    }) => void;
};
/**
 * Base class for analytics provider
 * Real providers should implement method `handle`
 */
export declare abstract class AnalyticsProvider {
    abstract handle(...args: any[]): any;
    constructor();
}
type SnowplowFn = Func<[string, any?, any?, any?, any?, any?], void> | null;
type SnowplowAnalyticsContext = {
    [key: string]: any;
};
declare global {
    interface Window {
        snowplow?: SnowplowFn;
        pendo?: {
            initialize: (options: any) => void;
            updateOptions: (options: any) => void;
            isReady?: () => boolean;
            track: (...args: any[]) => void;
        };
        Appcues: {
            identify: (a: string, b: object) => void;
            page: () => void;
        };
        hj?: (...args: any[]) => any;
    }
}
/**
 * Implements analytics logic for snowplow js tracker
 *
 * @see client/template/main.html
 * @see https://github.com/snowplow/snowplow-javascript-tracker
 */
export declare class SnowplowAnalyticsProvider extends AnalyticsProvider {
    /**
     * Snowplow tracker function
     * @type {function}
     */
    fn: SnowplowFn;
    contexts: SnowplowAnalyticsContext;
    snowplowSchemaInternalEvents: string;
    constructor(snowplowSchemaInternalEvents: string);
    handle(event: {
        method: AnalyticsMethod;
        args: string[];
    }): void;
    /**
     * Return numeric value at any case
     * @param value
     * @returns {number}
     */
    convertValue(value: any): any;
    /**
     * Create context object based on name and value
     *
     * @param name
     * @param value
     * @returns {{schema: string, data: *}}
     */
    buildContext(name: string, value: any): {
        schema: string;
        data: any;
    };
    /**
     * @see https://github.com/snowplow/snowplow/wiki/2-Specific-event-tracking-with-the-Javascript-tracker#31851-addglobalcontexts
     * @param name
     * @param value
     */
    addContext(name: string, value: any): void;
    /**
     * @see https://github.com/snowplow/snowplow/wiki/2-Specific-event-tracking-with-the-Javascript-tracker#31852-removeglobalcontexts
     * @param name
     */
    removeContext(name: string): void;
}
/**
 * Implements analytics logic for pendo js tracker
 *
 * @see client/template/main.html
 */
export declare class PendoAnalyticsProvider extends AnalyticsProvider {
    constructor();
    handle(event: {
        args?: any;
        method?: any;
    }): void;
    pendoTrack(name: string, data: {
        page: any;
        property?: any;
        value?: any;
        label?: any;
    }): void;
}
/**
 * Implements analytics logic for Hotjar tracker
 *
 * @see client/template/main.html
 */
export declare class HotjarAnalyticsProvider extends AnalyticsProvider {
    constructor();
    handle(event: {
        method: AnalyticsMethod;
        args: [string, {
            [key: string]: number | string | boolean | null;
        }];
    }): void;
}
export declare class AppcusesAnalyticsProvider extends AnalyticsProvider {
    constructor();
    handle(event: {
        method: AnalyticsMethod;
        args: [string, {
            [key: string]: number | string | boolean | null;
        }];
    }): void;
}
export {};
