import { Config, Mixpanel } from 'mixpanel-browser';
import { UaEventOptions } from 'react-ga4/types/ga4';
export type eventDataDefinition = {
    [key: string]: ((action: any) => any) | undefined;
};
export type currentUser = {
    email: string;
    first_name: string;
    id: number;
    last_name: string;
    [key: string]: unknown;
};
export type params = {
    [key: string]: ((action: any) => any) | undefined;
};
export type customTracker = (data: any, props?: any) => {};
export interface TrackerArguments {
    eventDataDefinition: eventDataDefinition;
    customTracker?: customTracker;
    googleTracking?: boolean;
}
export interface MixPanel extends Mixpanel {
    config: Config | undefined | null;
}
export interface AnalyticsUtils {
    createMiddleware: (eventDataDefinition: {
        [key: string]: ((action: any) => any) | undefined;
    }) => void;
    generateEventId: () => string;
    generateFlowId: () => string;
    initializeGA: (analyticsTrackingId: string) => void;
    intercomSingleEvent: (trackEventFunction: Function) => (eventData: GenericEventData) => void;
    intercomUpdateUser: (updaterFunction: Function) => (userProperties: GenericObject) => void;
    mixpanelPeopleSet: (mixpanel: MixPanel) => (userProfileProperties: GenericObject) => void;
    mixpanelSuperPropertiesRegister: (mixpanel: MixPanel) => (superProperties: GenericObject) => void;
    mixpanelGroupProfileSet: (mixpanel: MixPanel) => (groupKey: string, groupId: string | number, profileName: string) => void;
    mixpanelUserIdentify: (mixpanel: MixPanel) => (userProfileProperties: GenericObject, utilityId: number) => void;
    mixpanelUserReset: (mixpanel: MixPanel) => () => void;
    multiTracking: (trackerArgumentsArray: TrackerArguments[]) => (() => (next: any) => (action: any) => any)[];
    retrievePublicUserId: () => string;
    sendGAEvent: (category: string, action: string, label: string, value: number) => void;
    sendGAPageView: (pathname: string) => void;
    setGAUserId: (userId: string) => void;
    singleArgosEvent: (sendArgosAnalytics: Function) => (eventData: GenericEventData) => void;
    singleEventMultitracking: (trackers: Trackers, eventDefinitions: EventDefinitions) => (name: string, eventData: GenericEventData) => void;
    singleGAEvent: () => (eventData: UaEventOptions) => void;
    singleInhouseEvent: (sendInhouseAnalytics: Function) => (eventData: GenericEventData) => void;
    singleMixpanelEvent: (mixpanel: MixPanel) => (eventData: MixPanelEventData) => void;
}
export type GenericObject = {
    [key: string]: string | number | boolean | GenericObject;
};
export interface GenericEventData {
    [key: string]: GenericObject;
}
export interface MixPanelEventData {
    yourProperties: GenericObject;
    name: string;
}
export interface EventDefinitions {
    [key: string]: GenericEventData;
}
export interface Trackers {
    [key: string]: customTracker;
}
