import { Reminder } from './Reminder';
import { StateStore } from '../store';
import { ReminderPaginator } from '../pagination';
import { WithSubscriptions } from '../utils/WithSubscriptions';
import type { ReminderResponseBaseOrResponse } from './Reminder';
import type { StreamChat } from '../client';
import type { CreateReminderOptions, Event, EventTypes, LocalMessage, MessageResponse, ReminderResponse } from '../types';
export declare const DEFAULT_REMINDER_MANAGER_CONFIG: ReminderManagerConfig;
type MessageId = string;
export type ReminderEvent = {
    cid: string;
    created_at: string;
    message_id: MessageId;
    reminder: ReminderResponse;
    type: EventTypes;
    user_id: string;
};
export type ReminderManagerState = {
    reminders: Map<MessageId, Reminder>;
};
export type ReminderManagerConfig = {
    scheduledOffsetsMs: number[];
    stopTimerRefreshBoundaryMs: number;
};
export type ReminderManagerOptions = {
    client: StreamChat;
    config?: Partial<ReminderManagerConfig>;
};
export declare class ReminderManager extends WithSubscriptions {
    private client;
    configState: StateStore<ReminderManagerConfig>;
    state: StateStore<ReminderManagerState>;
    paginator: ReminderPaginator;
    constructor({ client, config }: ReminderManagerOptions);
    updateConfig(config: Partial<ReminderManagerConfig>): void;
    get stopTimerRefreshBoundaryMs(): number;
    get scheduledOffsetsMs(): number[];
    get reminders(): Map<string, Reminder>;
    getFromState(messageId: MessageId): Reminder | undefined;
    upsertToState: ({ data, overwrite, }: {
        data: ReminderResponseBaseOrResponse;
        overwrite?: boolean;
    }) => Reminder | undefined;
    removeFromState: (messageId: string) => void;
    hydrateState: (messages: MessageResponse[] | LocalMessage[]) => void;
    initTimers: () => void;
    clearTimers: () => void;
    static isReminderWsEventPayload: (event: Event) => event is ReminderEvent;
    registerSubscriptions: () => void;
    private subscribeReminderCreated;
    private subscribeReminderUpdated;
    private subscribeReminderDeleted;
    private subscribeMessageDeleted;
    private subscribeMessageUndeleted;
    private subscribeNotificationReminderDue;
    private subscribePaginatorStateUpdated;
    private subscribeConfigStateUpdated;
    upsertReminder: (options: CreateReminderOptions) => Promise<Reminder | undefined>;
    createReminder: (options: CreateReminderOptions) => Promise<Reminder | undefined>;
    updateReminder: (options: CreateReminderOptions) => Promise<Reminder | undefined>;
    deleteReminder: (messageId: MessageId) => Promise<void>;
    queryNextReminders: () => Promise<void>;
    queryPreviousReminders: () => Promise<void>;
}
export {};
