import type { PluginListenerHandle } from '@capacitor/core';
/**
 * Location object
 */
export interface MoEGeoLocation {
    latitude: number;
    longitude: number;
}
/**
 * General Attributes for tracking events
 */
export interface MoEGeneralAttributes {
    name: string;
    value: string | number | boolean | Array<string> | Array<number>;
}
/**
 * Account Object
 */
export interface MoEAccountMeta {
    /**
     * Account identifier
     */
    appId: string;
}
/**
 * Date and time attribute object
 */
export interface MoEDateTimeAttributes {
    /**
     * Date and time attribute name
     */
    name: string;
    /**
     * Attribute value in ISO8601 format [yyyy-MM-dd'T'HH:mm:ss'Z'].
     */
    value: string;
}
/**
 * Location attribute object
 */
export interface MoELocationAttributes {
    /**
     * Location Attribute name
     */
    name: string;
    /**
     * Location attribute value.
     */
    value: MoEGeoLocation;
}
/**
 * User attributes object
 */
export interface MoEProperties {
    /**
     * General Attributes
     */
    generalAttributes?: Array<MoEGeneralAttributes>;
    /**
     * Location Attributes
     */
    dateTimeAttributes?: Array<MoEDateTimeAttributes>;
    /**
     * Date time Attributes
     */
    locationAttributes?: Array<MoELocationAttributes>;
    /**
     * Is the event non-interactive
     */
    isNonInteractive?: boolean;
}
/**
 * User attribute Gender options
 */
export declare enum MoEUserGender {
    MALE = "male",
    FEMALE = "female",
    OTHER = "other"
}
/**
 * Status of the application.
 */
export declare enum MoEAppStatus {
    /**
     * Fresh installation of the app instance.
     */
    INSTALL = "install",
    /**
     * App was already present and user has updated the app.
     */
    UPDATE = "update"
}
/**
 * Campaign data.
 */
export interface MoEInAppCampaignData {
    /**
     * Unique Identifier for the campaign
     */
    campaignId: string;
    /**
     * Name given to the campaign while creation on the MoEngage Dashboard.
     */
    campaignName: string;
    /**
     * Additional Meta data related to the campaign.
     */
    campaignContext: MoEInAppCampaignContext;
}
/**
 * Additional Meta data related to the campaign.
 */
export interface MoEInAppCampaignContext {
    /**
     * Formatted Campaign Id
     */
    formattedCampaignId: string;
    /**
     * Additional Meta data related to the campaign.
     */
    attributes: Map<string, object>;
}
/**
 * In-App lifecycle event camapaign data
 */
export interface MoEInAppLifecycleData {
    /**
     * Account information
     */
    accountMeta: MoEAccountMeta;
    /**
     * In-App Campaign data
     */
    campaignData: MoEInAppCampaignData;
    /**
     * Platform information
     */
    platform: MoEPlatform;
}
/**
 * In-App custom event campaign data
 */
export interface MoEInAppCustomActionData {
    /**
     * Account information
     */
    accountMeta: MoEAccountMeta;
    /**
     * In-App Campaign data
     */
    campaignData: MoEInAppCampaignData;
    /**
     * Custom Action data
     */
    customAction: MoEInAppCustomAction;
    /**
     * Platform information
     */
    platform: MoEPlatform;
}
/**
 * InApp Action type
 */
export declare enum MoEInAppActionType {
    NAVIGATION = "navigation",
    CUSTOM = "custom"
}
/**
 * In-App custom action data
 */
export interface MoEInAppCustomAction {
    /**
     * InApp Action type
     */
    actionType: MoEInAppActionType;
    /**
     * Key-Value Pair entered on the MoEngage Platform during campaign creation.
     */
    kvPair: Map<string, object>;
}
/**
 * In-App navigation event campaign data
 */
export interface MoEInAppNavigationData {
    /**
     * Account information
     */
    accountMeta: MoEAccountMeta;
    /**
     * In-App Campaign data
     */
    campaignData: MoEInAppCampaignData;
    /**
     * Navigation action data
     */
    navigation: MoEInAppNavigation;
    /**
     * Platform Data
     */
    platform: MoEPlatform;
}
/**
 * In-App navigation action data
 */
export interface MoEInAppNavigation {
    /**
     * InApp Action type
     */
    actionType: MoEInAppActionType;
    /**
     * Type of Navigation.
     */
    navigationType: string;
    /**
     * Navigation URL
     */
    navigationUrl: string;
    /**
     * Key-Value Pair entered on the MoEngage Platform during campaign creation.
     */
    kvPair: Map<string, Object>;
}
/**
 * Data for self handled campaign.
 */
export interface MoEInAppSelfHandledCampaignData {
    /**
     * Account information
     */
    accountMeta: MoEAccountMeta;
    /**
     * In-App Campaign data
     */
    campaignData: MoEInAppCampaignData;
    /**
     * SelfHandled data
     */
    selfHandled: MoEInAppSelfHandledCampaign;
}
/**
 * Self Handled campaign object
 */
export interface MoEInAppSelfHandledCampaign {
    /**
     * Self handled campaign payload.
     */
    payload: string;
    /**
     * Interval after which in-app should be dismissed, unit - Seconds
     */
    dismissInterval: number;
    /**
     * Should the campaign be dismissed by pressing the back button or using the back gesture.
     * if the value is true campaign should be dismissed on back press.
     */
    isCancellable: boolean;
}
/**
 * Push event data
 */
export interface MoEPushCampaignData {
    /**
     * Account information
     */
    accountMeta: MoEAccountMeta;
    /**
     * Push campaign object
     */
    pushCampaign: MoEPushCampaign;
    /**
     * Platform data
     */
    platform: MoEPlatform;
}
/**
 * Platform Data
 */
export declare enum MoEPlatform {
    iOS = "iOS",
    ANDROID = "android"
}
/**
 * Push campaign object
 */
export interface MoEPushCampaign {
    /**
     * Is the click action a defualt action
     */
    isDefaultAction: boolean;
    /**
     * Clicked Action data
     */
    clickedAction: Map<String, object>;
    /**
     * Key-Value Pair entered on the MoEngage Platform during campaign creation.
     */
    payload: Map<String, object>;
}
/**
 * Supported push services
 */
export declare enum MoEPushService {
    APNS = 0,
    FCM = 1,
    MI_PUSH = 2,
    PUSH_KIT = 3
}
/**
 * Push token object
 */
export interface MoEPushTokenData {
    /**
     * Platform type
     */
    platform: MoEPlatform;
    /**
     * Type of push service
     */
    pushService: MoEPushService;
    /**
     * Push Token
     */
    token: String;
}
/**
 * Permission Type
 */
export declare enum MoEPermissionType {
    PUSH = "push"
}
/**
 * Permission Response Data
 */
export interface MoEPermissionResultData {
    /**
     * Platform type
     */
    platform: MoEPlatform;
    /**
     * State of permission
     */
    isGranted: boolean;
    /**
     * Type of permission
     */
    type: MoEPermissionType;
}
/**
 * User Delete Response Data
 */
export interface MoEUserDeleteData {
    /**
     * Account information
     */
    accountMeta: MoEAccountMeta;
    /**
     * Status of user deletion
     */
    isSuccess: boolean;
}
export interface MoEInitConfig {
    /**
     * Analytics Config data
     */
    analyticsConfig: MoEAnalyticsConfig;
}
export interface MoEAnalyticsConfig {
    /**
     * Status of whether boolean user attribute should be tracked as number or not.
     */
    shouldTrackUserAttributeBooleanAsNumber: boolean;
}
/**
 * Nudge Position values
 */
export declare enum MoENudgePosition {
    Top = "top",
    Bottom = "bottom",
    BottomLeft = "bottomLeft",
    BottomRight = "bottomRight",
    Any = "any"
}
export declare type MoEPushTokenListener = (event: MoEPushTokenData) => void;
export declare type MoEPushClickListener = (event: MoEPushCampaignData) => void;
export declare type MoEInAppShownListener = (event: MoEInAppLifecycleData) => void;
export declare type MoEInAppDismissedListener = (event: MoEInAppLifecycleData) => void;
export declare type MoEInAppClickedListener = (event: MoEInAppNavigationData) => void;
export declare type MoEInAppCustomActionListener = (event: MoEInAppCustomActionData) => void;
export declare type MoEInAppSelfHandledListener = (event: MoEInAppSelfHandledCampaignData) => void;
export declare type MoEPermissionListener = (event: MoEPermissionResultData) => void;
export declare type MoEUserDeleteCallback = (userDeleteData: MoEUserDeleteData) => void;
export interface MoECapacitorCorePlugin {
    /**
     * Initialise MoEngage Capacitor Plugin
     *
     * @param appId Account Identifier
     * @since 2.0.0
     */
    initialize(options: {
        appId: string;
        initConfig: MoEInitConfig;
    }): Promise<void>;
    /**
     * Track user behaviour as events with properties
     *
     * @param eventName Event Name
     * @param properties {\} properties of the event.
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    trackEvent(options: {
        eventName: string;
        eventAttributes?: MoEProperties;
        appId: string;
    }): Promise<void>;
    /**
     * Set a Unique Identifier for the user.
     * @param uniqueId identifier
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setUniqueId(options: {
        uniqueId: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set an Alias to update the existing Unique Id
     * @param alias identifier
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setAlias(options: {
        alias: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's full name
     * @param userName full name of the user
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setUserName(options: {
        userName: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's first name
     * @param firstName first name of the user
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setFirstName(options: {
        firstName: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's last name
     *
     * @param lastName last name of the user
     * @param appId Account Identifier
     */
    setLastName(options: {
        lastName: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's email id
     * @param emailId email id
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setEmailId(options: {
        emailId: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's mobile number
     * @param mobileNumber mobile number
     * @param appId Account Identifier
     */
    setMobileNumber(options: {
        mobileNumber: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's birthdate.
     * @param birthdate birthdate to be set in ISO8601 format [yyyy-MM-dd'T'HH:mm:ss'Z'].
     * @param appId Account Identifier
     *
     * @since 1.0.0
     */
    setBirthDate(options: {
        birthdate: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's gender.
     * @param gender {MoEUserGender} value
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setGender(options: {
        gender: MoEUserGender;
        appId: string;
    }): Promise<void>;
    /**
     * Set user's location
     * @param location {MoEGeoLocation} of the user
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setUserLocation(options: {
        location: MoEGeoLocation;
        appId: string;
    }): Promise<void>;
    /**
     * Set the user defined attribute with value.
     * @param name user attribute name
     * @param value user attribute value
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setUserAttribute(options: {
        name: string;
        value: string | number | boolean | Array<string> | Array<number>;
        appId: string;
    }): Promise<void>;
    /**
     * Set a user attribute timestamp for the current user
     * @param name attribute name
     * @param value User attribute value in ISO8601 format [yyyy-MM-dd'T'HH:mm:ss'Z'].
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setUserAttributeDate(options: {
        name: string;
        value: string;
        appId: string;
    }): Promise<void>;
    /**
     * Set the user attribute location
     * @param name attribute name
     * @param location {MoEGeoLocation}
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setUserAttributeLocation(options: {
        name: string;
        location: MoEGeoLocation;
        appId: string;
    }): Promise<void>;
    /**
     * This API tells the SDK whether it is a fresh install or an existing application was updated.
     * @param appStatus {MoEAppStatus} if it is an existing user set "update" else set "install"
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setAppStatus(options: {
        appStatus: MoEAppStatus;
        appId: string;
    }): Promise<void>;
    /**
     * Notify the SDK that the user has logged out of the application
     *
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    logoutUser(options: {
        appId: string;
    }): Promise<void>;
    /**
     * API to enable SDK usage.
     *
     * @param appId Account Identifier
     *
     * @remarks By default the SDK is enabled, this API should only be called if you have called
     * `disableSdk()` at some point.
     *
     * @since 2.0.0
     */
    enableSdk(options: {
        appId: string;
    }): Promise<void>;
    /**
     * API to disable all features of the SDK.
     *
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    disableSdk(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Call this method wherever InApp message has to be shown, if available.
     *
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    showInApp(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Triggers fetching self handled in-app, the result is returned in the `inAppCampaignSelfHandled` listener
     *
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    getSelfHandledInApp(options: {
        appId: string;
    }): Promise<void>;
    /**
     * API to track self handled in-app shown event.
     * @param campaignData {MoEInAppSelfHandledCampaignData} in-app campaign
     *
     * @since 2.0.0
     */
    selfHandledShown(campaignData: MoEInAppSelfHandledCampaignData): Promise<void>;
    /**
     * API to track click event of any other widget apart from primary widget in the self handled in-app.
     * @param campaignData {MoEInAppSelfHandledCampaignData} in-app campaign
     *
     * @since 2.0.0
     */
    selfHandledClicked(campaignData: MoEInAppSelfHandledCampaignData): Promise<void>;
    /**
     * API to track self handled in-app's dismiss event.
     * @param campaignData {MoEInAppSelfHandledCampaignData} in-app campaign
     *
     * @since 2.0.0
     */
    selfHandledDismissed(campaignData: MoEInAppSelfHandledCampaignData): Promise<void>;
    /**
     * Set current context for in-app module.
     * @param contexts  array of contexts
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    setInAppContext(options: {
        contexts: Array<string>;
        appId: string;
    }): Promise<void>;
    /**
     * Resets/Clears the previously set context for in-app module.
     *
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    resetInAppContext(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Optionally opt-in data tracking.
     *
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    enableDataTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Optionally opt-out of data tracking. When data tracking is opted no event or user
     * attribute is tracked on MoEngage Platform.
     *
     * @param appId Account Identifier
     *
     * @since 2.0.0
     */
    disableDataTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Pass FCM Push Token to the MoEngage SDK
     * @remarks This API is only for `Android`
     *
     * @param token FCM token
     *
     * @since 2.0.0
     */
    passFcmPushToken(options: {
        token: string;
        appId: string;
    }): Promise<void>;
    /**
     * Pass FCM payload to MoEngage SDK
     * @remarks This API is only for `Android`
     *
     * @param payload Push payload
     *
     * @since 2.0.0
     */
    passFcmPushPayload(options: {
        payload: object;
        appId: string;
    }): Promise<void>;
    /**
     * Register For Push Notification for iOS
     * @remarks This API is only for `iOS`
     *
     * @since 2.0.0
     */
    registerForPush(): Promise<void>;
    /**
     * Notifies MoEngage SDK of device orientation change
     * @remarks This API is only for `Android`
     *
     * @since 2.0.0
     */
    onOrientationChanged(): Promise<void>;
    /**
     * Listen for push token generated event
     *
     * @since 2.0.0
     */
    addListener(eventName: 'pushTokenGenerated', listenerFunc: MoEPushTokenListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    /**
     * Listen for push clicked event
     *
     * @since 1.0.0
     */
    addListener(eventName: 'pushClicked', listenerFunc: MoEPushClickListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    /**
     * Listen for in-app campaign shown event
     *
     * @since 1.0.0
     */
    addListener(eventName: 'inAppCampaignShown', listenerFunc: MoEInAppShownListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    /**
     * Listen for in-app campaign clicked event
     *
     * @since 1.0.0
     */
    addListener(eventName: 'inAppCampaignClicked', listenerFunc: MoEInAppClickedListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    addListener(eventName: 'inAppCampaignDismissed', listenerFunc: MoEInAppDismissedListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    /**
     * Listen for in-app campaign custom action event
     *
     * @since 1.0.0
     */
    addListener(eventName: 'inAppCampaignCustomAction', listenerFunc: MoEInAppCustomActionListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    /**
     * Listen for in-app campaign self handled available event
     *
     * `getSelfHandledInApp()` api call returns the available self handled in-app via this listener.
     *
     * @since 1.0.0
     */
    addListener(eventName: 'inAppCampaignSelfHandled', listenerFunc: MoEInAppSelfHandledListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    /**
     * Enables GAID tracking, by default GAID tracking is disabled.
     * @remarks This API is only for `Android`
     *
     * @since 2.0.0
     */
    enableAdIdTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Disables GAID tracking.
     * @remarks This API is only for `Android`
     *
     * @since 2.0.0
     */
    disableAdIdTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Enables Android ID tracking, by default ANdroid ID tracking is disabled.
     * @remarks This API is only for `Android`
     *
     * @since 2.0.0
     */
    enableAndroidIdTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Disables Android ID tracking.
     * @remarks This API is only for `Android`
     *
     * @since 2.0.0
     */
    disableAndroidIdTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * API to create notification channels on Android.
     * @remarks This API is only for `Android`
     *
     * @since 2.0.0
     */
    setupNotificationChannelsAndroid(): Promise<void>;
    /**
     * Notify the SDK on notification permission granted to the application.
     * @remarks This API is only for `Android`
     *
     * @param isGranted true if the permission is granted else false
     *
     * @since 2.0.0
     */
    pushPermissionResponseAndroid(options: {
        isGranted: boolean;
    }): Promise<void>;
    /**
     * Navigates the user to the Notification settings on Android 8 or above,
     * on older versions the user is navigated the application settings or
     * application info screen.
     * @remarks This API is only for `Android`
     */
    navigateToSettingsAndroid(): Promise<void>;
    /**
     * Requests the push permission on Android 13 and above.
     * @remarks This API is only for `Android`
     */
    requestPushPermissionAndroid(): Promise<void>;
    /**
     * Listen for permission response
     * @remarks This API is only for `Android`
     *
     * `requestPushPermissionAndroid()` api call returns the state of permission via this listener.
     *
     * @since 2.0.0
     */
    addListener(eventName: 'onPermissionResult', listenerFunc: MoEPermissionListener): Promise<PluginListenerHandle> & PluginListenerHandle;
    /**
     * Enable Device-id tracking. It is enabled by default and should be called only if tracking is disabled at some point.
     *
     */
    enableDeviceIdTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Disables Device-id tracking.
     */
    disableDeviceIdTracking(options: {
        appId: string;
    }): Promise<void>;
    /**
     * Updates the Notification request attempt count, the request attempt count will be
     * incremented by the passed fresh count.
     *
     * NOTE: Call this API only when the Application is handling the Notification request
     * permission.
     * @remarks This API is only for `Android`
     *
     * @param appId Account Identifier
     * @param count - Number of fresh request attempts.
     *
     */
    updatePushPermissionRequestCountAndroid(options: {
        appId: string;
        count: number;
    }): Promise<void>;
    /**
     * Delete Current User Data From MoEngage Server
     *
     * @remarks This API is only for `Android`
     * @param appId Account Identifier
     * @param callback instance of {@link MoEUserDeleteCallback} to get the API response
     */
    deleteUser(options: {
        appId: string;
    }, callback: MoEUserDeleteCallback): Promise<void>;
    /**
     * Show Nudge
     *
     * @param position Place on the screen to show the Nudge.
     * @param appId Account Identifier
     */
    showNudge(options: {
        position: MoENudgePosition;
        appId: string;
    }): Promise<void>;
}
