import { NotificationIOS } from './NotificationIOS';
import { NativeAndroidChannel, NativeAndroidChannelGroup, NotificationAndroid, AndroidLaunchActivityFlag } from './NotificationAndroid';
import { Trigger } from '..';
/**
 * Interface for building a local notification for both Android & iOS devices.
 *
 * To learn more about displaying a notification, view the [Displaying a Notification](/react-native/docs/displaying-a-notification)
 * documentation.
 *
 */
export interface Notification {
    /**
     * A unique identifier for your notification.
     *
     * Notifications with the same ID will be created as the same instance, allowing you to update
     * a notification which already exists on the device.
     *
     * Defaults to a random string if not provided.
     */
    id?: string;
    /**
     * The notification title which appears above the body text.
     */
    title?: string | undefined;
    /**
     * The notification subtitle, which appears on a new line below/next the title.
     */
    subtitle?: string | undefined;
    /**
     * The main body content of a notification.
     */
    body?: string | undefined;
    /**
     * Additional data to store on the notification. Only `string` values can be stored.
     *
     * Data can be used to provide additional context to your notification which can be retrieved
     * at a later point in time (e.g. via an event).
     */
    data?: {
        [key: string]: string;
    };
    /**
     * Android specific notification options. See the [`NotificationAndroid`](/react-native/reference/notificationandroid)
     * interface for more information and default options which are applied to a notification.
     *
     * @platform android
     */
    android?: NotificationAndroid;
    /**
     * iOS specific notification options. See the [`NotificationIOS`](/react-native/reference/notificationios)
     * interface for more information and default options which are applied to a notification.
     *
     * @platform ios
     */
    ios?: NotificationIOS;
    /**
     * Will be populated if it's a remote notification
     *
     * @platform ios
     */
    readonly remote?: boolean;
}
/**
 * An interface representing a notification & action that launched the current app / or Android activity.
 *
 * View the [App open events](/react-native/docs/events#app-open-events) documentation to learn more.
 *
 * This interface is returned from [`getInitialNotification`](/react-native/reference/getinitialnotification) when
 * an initial notification is available.
 *
 * Deprecated for iOS in favour of `onForegroundEvent`
 *
 * @platform android
 */
export interface InitialNotification {
    /**
     * The notification which the user interacted with, which caused the application to open.
     */
    notification: Notification;
    /**
     * The press action which the user interacted with, on the notification, which caused the application to open.
     */
    pressAction: NotificationPressAction;
    /**
     * The input from a notification action.
     *
     * The input detail is available when the [`EventType`](/react-native/reference/eventtype) is:
     *
     * - [`EventType.ACTION_PRESS`](/react-native/reference/eventtype#action_press)
     * - The notification quick action has input enabled. View [`AndroidInput`](/react-native/reference/androidinput) for more details.
     *
     * @platform android API Level >= 20
     */
    input?: string;
}
/**
 * An interface representing a notification that is currently displayed in the notification tray.
 */
export interface DisplayedNotification {
    /**
     * ID of the notification
     */
    id?: string;
    /**
     * Date the notification was shown to the user
     */
    date?: string;
    /**
     * The payload that was used to create the notification (if available)
     */
    notification: Notification;
    /**
     * The trigger that was used to schedule the notification (if available)
     *
     * @platform iOS
     */
    trigger: Trigger;
}
/**
 * An interface representing a notification that is pending.
 */
export interface TriggerNotification {
    /**
     * The notification
     */
    notification: Notification;
    /**
     * The trigger that is used to schedule the notification
     */
    trigger: Trigger;
}
/**
 * An interface representing a Notifee event.
 *
 * View the [Events](/react-native/docs/events) documentation to learn more about foreground and
 * background events.
 */
export interface Event {
    /**
     * The type of notification event.
     */
    type: EventType;
    /**
     * An object containing event detail.
     */
    detail: EventDetail;
}
/**
 * A representation of a Foreground Service task registered via [`registerForegroundService`](/react-native/reference/registerforegroundservice).
 *
 * The task must resolve a promise once complete, and in turn removes the notification.
 *
 * View the [Foreground Service](/react-native/docs/android/foreground-service) documentation to
 * learn more.
 *
 * @platform android
 */
export declare type ForegroundServiceTask = (notification: Notification) => Promise<void>;
/**
 * The interface used to describe a press action for a notification.
 *
 * There are various ways a user can interact with a notification, the most common being pressing
 * the notification, pressing an action or providing text input. This interface defines what happens
 * when a user performs such interaction.
 *
 * On Android; when provided to a notification action, the action will only open you application if
 * a `launchActivity` and/or a `mainComponent` is provided.
 */
export interface NotificationPressAction {
    /**
     * The unique ID for the action.
     *
     * The `id` property is used to differentiate between user press actions. When listening to notification
     * events, the ID can be read from the `event.detail.pressAction` object.
     */
    id: string;
    /**
     * The custom Android Activity to launch on a press action.
     *
     * This property can be used in advanced scenarios to launch a custom Android Activity when the user
     * performs a press action.
     *
     * View the [Android Interaction](/react-native/docs/android/interaction) docs to learn more.
     *
     * @platform android
     */
    launchActivity?: string;
    /**
     * Custom flags that are added to the Android [Intent](https://developer.android.com/reference/android/content/Intent.html) that launches your Activity.
     *
     * These are only required if you need to customise the behaviour of how your activities are launched; by default these are not required.
     *
     * @platform android
     */
    launchActivityFlags?: AndroidLaunchActivityFlag[];
    /**
     * A custom registered React component to launch on press action.
     *
     * This property can be used to open a custom React component when the user performs a press action.
     * For this to correctly function on Android, a minor native code change is required.
     *
     * View the [Press Action](/react-native/docs/android/interaction#press-action) document to learn more.
     *
     * @platform android
     */
    mainComponent?: string;
}
/**
 * The interface used to describe a full-screen action for a notification.
 *
 * By setting a `fullScreenAction`, when the notification is displayed, it will launch a full-screen intent.
 *
 * On Android; when provided to a notification action, the action will only open you application if
 * a `launchActivity` and/or a `mainComponent` is provided.
 *
 * Please see the [FullScreen Action](/react-native/docs/android/behaviour#full-screen-action) document to learn more.
 */
export interface NotificationFullScreenAction {
    /**
     * The unique ID for the action.
     *
     * The `id` property is used to differentiate between full-screen actions. When listening to notification
     * events, the ID can be read from the `event.detail.notification.android.fullScreenAction` object.
     */
    id: string;
    /**
     * The custom Android Activity to launch on a full-screen action.
     *
     * This property can be used in advanced scenarios to launch a custom Android Activity when the user
     * performs a full-screen action.
     *
     * View the [Android Full Screen](/react-native/docs/android/behviour#full-screen-action) docs to learn more.
     *
     * @platform android
     */
    launchActivity?: string;
    /**
     * Custom flags that are added to the Android [Intent](https://developer.android.com/reference/android/content/Intent.html) that launches your Activity.
     *
     * These are only required if you need to customise the behaviour of how your activities are launched; by default these are not required.
     *
     * @platform android
     */
    launchActivityFlags?: AndroidLaunchActivityFlag[];
    /**
     * A custom registered React component to launch on press action.
     *
     * This property can be used to open a custom React component when the notification is displayed.
     * For this to correctly function on Android, a minor native code change is required.
     *
     * View the [Full-screen Action](/react-native/docs/android/behviour#full-screen-action) document to learn more.
     *
     * @platform android
     */
    mainComponent?: string;
}
/**
 * An enum representing an event type, defined on [`Event`](/react-native/reference/event).
 *
 * View the [Events](/react-native/docs/events) documentation to learn more about foreground and
 * background events.
 */
export declare enum EventType {
    /**
     * An unknown event was received.
     *
     * This event type is a failsafe to catch any unknown events from the device. Please
     * report an issue with a reproduction so it can be correctly handled.
     */
    UNKNOWN = -1,
    /**
     * Event type is sent when the user dismisses a notification. This is triggered via the user swiping
     * the notification from the notification shade or performing "Clear all" notifications.
     *
     * This event is **not** sent when a notification is cancelled or times out.
     *
     * @platform android Android
     */
    DISMISSED = 0,
    /**
     * Event type is sent when a notification has been pressed by the user.
     *
     * On Android, notifications must include an `android.pressAction` property for this event to trigger.
     *
     * On iOS, this event is always sent when the user presses a notification.
     */
    PRESS = 1,
    /**
     * Event type is sent when a user presses a notification action.
     */
    ACTION_PRESS = 2,
    /**
     * Event type sent when a notification has been delivered to the device. For trigger notifications,
     * this event is sent at the point when the trigger executes, not when a the trigger notification is created.
     *
     * It's important to note even though a notification has been delivered, it may not be shown to the
     * user. For example, they may have notifications disabled on the device/channel/app.
     */
    DELIVERED = 3,
    /**
     * Event is sent when the user changes the notification blocked state for the entire application or
     * when the user opens the application settings.
     *
     * @platform android API Level >= 28
     */
    APP_BLOCKED = 4,
    /**
     * Event type is sent when the user changes the notification blocked state for a channel in the application.
     *
     * @platform android API Level >= 28
     */
    CHANNEL_BLOCKED = 5,
    /**
     * Event type is sent when the user changes the notification blocked state for a channel group in the application.
     *
     * @platform android API Level >= 28
     */
    CHANNEL_GROUP_BLOCKED = 6,
    /**
     * Event type is sent when a notification trigger is created.
     */
    TRIGGER_NOTIFICATION_CREATED = 7
}
/**
 * An interface representing the different detail values which can be provided with a notification event.
 *
 * View the [Events](/react-native/docs/events) documentation to learn more.
 */
export interface EventDetail {
    /**
     * The notification this event relates to.
     *
     * The notification details is available when the [`EventType`](/react-native/reference/eventtype) is one of:
     *
     *  - [`EventType.DISMISSED`](/react-native/reference/eventtype#dismissed)
     *  - [`EventType.PRESS`](/react-native/reference/eventtype#press)
     *  - [`EventType.ACTION_PRESS`](/react-native/reference/eventtype#action_press)
     *  - [`EventType.DELIVERED`](/react-native/reference/eventtype#delivered)
     *  - [`EventType.TRIGGER_NOTIFICATION_CREATED`](/react-native/reference/eventtype#trigger_notification_created)
     */
    notification?: Notification;
    /**
     * The press action which triggered the event.
     *
     * If a press action caused the event, this property will be available allowing you to retrieve the
     * action ID and perform logic.
     *
     * The press action details is available when the [`EventType`](/react-native/reference/eventtype) is one of:
     *
     * - [`EventType.PRESS`](/react-native/reference/eventtype#press)
     * - [`EventType.ACTION_PRESS`](/react-native/reference/eventtype#action_press)
     */
    pressAction?: NotificationPressAction;
    /**
     * The input from a notification action.
     *
     * The input detail is available when the [`EventType`](/react-native/reference/eventtype) is:
     *
     * - [`EventType.ACTION_PRESS`](/react-native/reference/eventtype#action_press)
     * - The notification quick action has input enabled. View [`AndroidInput`](/react-native/reference/androidinput) for more details.
     *
     * @platform android API Level >= 20
     */
    input?: string;
    /**
     * The channel that had its block state changed.
     *
     * Note that if the channel no longer exists during the time the event was sent the channel property will be undefined.
     *
     * The channel detail is available when the event type is [`EventType.CHANNEL_BLOCKED`](/react-native/reference/eventtype#channel_blocked).
     *
     * @platform android API Level >= 28
     */
    channel?: NativeAndroidChannel;
    /**
     * The channel group that had its block state changed.
     *
     * Note that if the channel no longer exists during the time the event was sent the channel group property will be undefined.
     *
     * The channel group detail is available when the event type is [`EventType.CHANNEL_GROUP_BLOCKED`](/react-native/reference/eventtype#channel_group_blocked).
     *
     * @platform android API Level >= 28
     */
    channelGroup?: NativeAndroidChannelGroup;
    /**
     * The notification blocked status of your entire application.
     *
     * The blocked detail is available when the event type is [`EventType.APP_BLOCKED`](/react-native/reference/eventtype#app_blocked).
     *
     * @platform android API Level >= 28
     */
    blocked?: boolean;
}
