/**
 * @module node-opcua-client-private
 */
import { EventEmitter } from "events";
import type { ReadValueIdOptions, TimestampsToReturn } from "node-opcua-service-read";
import { MonitoringMode, type MonitoringParametersOptions, type NotificationMessage, type SetTriggeringResponse } from "node-opcua-service-subscription";
import { type Callback, type ErrorCallback, type StatusCode } from "node-opcua-status-code";
import type { ClientMonitoredItem } from "../client_monitored_item";
import type { ClientMonitoredItemBase } from "../client_monitored_item_base";
import type { ClientMonitoredItemGroup } from "../client_monitored_item_group";
import type { ClientSession, MonitoredItemData, SubscriptionId } from "../client_session";
import { type ClientHandle, type ClientMonitoredItemBaseMap, ClientSubscription, type ClientSubscriptionOptions, type ModifySubscriptionOptions, type ModifySubscriptionResult } from "../client_subscription";
import { ClientMonitoredItemGroupImpl } from "./client_monitored_item_group_impl";
import type { ClientSidePublishEngine } from "./client_publish_engine";
import type { ClientSessionImpl } from "./client_session_impl";
export declare const PENDING_SUBSCRIPTION_ID = 3234512922;
export declare const TERMINATED_SUBSCRIPTION_ID = 3234512923;
export declare const TERMINATING_SUBSCRIPTION_ID = 3234512924;
export declare class ClientSubscriptionImpl extends EventEmitter implements ClientSubscription {
    #private;
    /**
     * the associated session
     * @property session
     * @type {ClientSession}
     */
    get session(): ClientSessionImpl;
    get hasSession(): boolean;
    get isActive(): boolean;
    subscriptionId: SubscriptionId;
    publishingInterval: number;
    lifetimeCount: number;
    maxKeepAliveCount: number;
    maxNotificationsPerPublish: number;
    publishingEnabled: boolean;
    priority: number;
    get monitoredItems(): ClientMonitoredItemBaseMap;
    set monitoredItems(value: ClientMonitoredItemBaseMap);
    timeoutHint: number;
    publishEngine: ClientSidePublishEngine;
    lastSequenceNumber: number;
    hasTimedOut: boolean;
    constructor(session: ClientSession, options: ClientSubscriptionOptions);
    terminate(...args: any[]): any;
    /**

     */
    _nextClientHandle(): number;
    monitor(itemToMonitor: ReadValueIdOptions, requestedParameters: MonitoringParametersOptions, timestampsToReturn: TimestampsToReturn, monitoringMode: MonitoringMode): Promise<ClientMonitoredItemBase>;
    monitor(itemToMonitor: ReadValueIdOptions, requestedParameters: MonitoringParametersOptions, timestampsToReturn: TimestampsToReturn, monitoringMode: MonitoringMode, done: Callback<ClientMonitoredItemBase>): void;
    monitorItems(itemsToMonitor: ReadValueIdOptions[], requestedParameters: MonitoringParametersOptions, timestampsToReturn: TimestampsToReturn): Promise<ClientMonitoredItemGroup>;
    monitorItems(itemsToMonitor: ReadValueIdOptions[], requestedParameters: MonitoringParametersOptions, timestampsToReturn: TimestampsToReturn, done: Callback<ClientMonitoredItemGroup>): void;
    _delete_monitored_items(monitoredItems: ClientMonitoredItemBase[], callback: ErrorCallback): void;
    setPublishingMode(publishingEnabled: boolean): Promise<StatusCode>;
    setPublishingMode(publishingEnabled: boolean, callback: Callback<StatusCode>): void;
    /**
     *
     */
    setTriggering(triggeringItem: ClientMonitoredItemBase, linksToAdd: ClientMonitoredItemBase[] | null, linksToRemove?: ClientMonitoredItemBase[] | null): Promise<SetTriggeringResponse>;
    setTriggering(triggeringItem: ClientMonitoredItemBase, linksToAdd: ClientMonitoredItemBase[] | null, linksToRemove: ClientMonitoredItemBase[] | null, callback: Callback<SetTriggeringResponse>): void;
    modify(options: ModifySubscriptionOptions, callback: Callback<ModifySubscriptionResult>): void;
    modify(options: ModifySubscriptionOptions): Promise<ModifySubscriptionResult>;
    getMonitoredItems(): Promise<MonitoredItemData>;
    getMonitoredItems(callback: Callback<MonitoredItemData>): void;
    toString(): string;
    /**
     * returns the approximated remaining life time of this subscription in milliseconds
     */
    evaluateRemainingLifetime(): number;
    _add_monitored_item(clientHandle: ClientHandle, monitoredItem: ClientMonitoredItemBase): void;
    _add_monitored_items_group(monitoredItemGroup: ClientMonitoredItemGroupImpl): void;
    _wait_for_subscription_to_be_ready(done: ErrorCallback): void;
    private __on_publish_response_DataChangeNotification;
    private __on_publish_response_StatusChangeNotification;
    private __on_publish_response_EventNotificationList;
    onNotificationMessage(notificationMessage: NotificationMessage): void;
    private _terminate_step2;
    private _remove;
    _removeMonitoredItem(clientHandle: ClientHandle): void;
    _removeGroup(monitoredItemGroup: ClientMonitoredItemGroup): void;
    /**
     * @private
     * @param itemToMonitor
     * @param monitoringParameters
     * @param timestampsToReturn
     */
    _createMonitoredItem(itemToMonitor: ReadValueIdOptions, monitoringParameters: MonitoringParametersOptions, timestampsToReturn: TimestampsToReturn, monitoringMode?: MonitoringMode): ClientMonitoredItem;
}
export declare function ClientMonitoredItem_create(subscription: ClientSubscription, itemToMonitor: ReadValueIdOptions, monitoringParameters: MonitoringParametersOptions, timestampsToReturn: TimestampsToReturn, monitoringMode?: MonitoringMode, callback?: (err3?: Error | null, monitoredItem?: ClientMonitoredItem) => void): ClientMonitoredItem;
export declare function __create_subscription(subscription: ClientSubscriptionImpl, callback: ErrorCallback): void;
