import { HDateTime, HDict, HRef, HStr } from 'haystack-core';
import { ClientServiceConfig } from '../ClientServiceConfig';
import { NotificationsHandler } from './NotificationsHandler';
/**
 * Notification object that has a Notification backing record.
 */
export interface Notification extends HDict {
    /** The id of the notification record */
    id?: HRef;
    /** The target application this notification is intended for  */
    targetApp: HStr;
    /** A unique topic the notification addresses  */
    topic: HStr;
    /** The kind of notification */
    kind: 'alarm' | 'info' | 'warning' | 'success' | 'error';
    /** The current notification state */
    state: HStr;
    /** A message to accompany this notification that is direct to the end user */
    message?: HStr;
    lastUpdateTime?: HDateTime;
    creation?: HDateTime;
}
/**
 * The subject changed event callback handler.
 */
export interface NotificationEventHandler {
    (notification: Notification[]): void;
}
/**
 * An implementation of the FIN Notification service.
 */
export declare class NotificationService<NotificationType extends Notification = Notification> {
    #private;
    /**
     * Constructs a new notifications service object.
     *
     * @param serviceConfig Service configuration.
     */
    constructor(serviceConfig: ClientServiceConfig);
    make(callbacks: NotificationEventHandler[]): Promise<NotificationsHandler>;
    /**
     * Get all the notifications in the system for the current user
     *
     * @returns The result of the read operation.
     */
    readAll(): Promise<NotificationType[]>;
    /**
     * Get notification topics that are visible to the current user
     *
     * @returns The result of the read operation.
     */
    readAllTopics(): Promise<HStr[]>;
    /**
     * Get all notifications in the system for the current user filtered
     * according to the user notification settings.
     *
     * @param filter A haystack filter
     * @returns The result of the read operation.
     */
    readAllCurrentFiltered(filter?: string): Promise<NotificationType[]>;
    /**
     * Get notifications for a topic that are visible to the
     * current user
     *
     * @param filter A haystack filter
     * @returns The filtered notifications.
     */
    readByTopicFilter(filter?: string): Promise<NotificationType>;
    /**
     * This operations will only be valid if the current user has write access to the
     * notification `targetApp` and to the project the notification is stored in.
     * Super users are allowed to post any notification, including system ones.
     *
     * @param notification The notification object
     * @returns The filtered notifications.
     */
    create(notification: NotificationType): Promise<HRef>;
    /**
     * Get all the new notifications in the system for the current user.
     *
     * @param timeOfLastMod Time of the last modification.
     * @returns New notifications since timeOfLastMod
     */
    poll(timeOfLastMod: HDateTime): Promise<NotificationType[]>;
    /**
     * Marks the state of notification with the specified id as resolved.
     *
     * @param id The notification ID to resolve
     * @returns The notification object
     */
    resolve(id: string | HRef): Promise<NotificationType>;
    /**
     * Marks the state of notification state as dismissed.
     *
     * @param id The notification ID to dismiss
     * @returns The notification object
     */
    dismiss(id: string | HRef): Promise<NotificationType>;
}
