import type { GetDeviceConfig } from "@zwave-js/config";
import { CommandClasses, type ControlsCC, Duration, type EndpointId, type GetEndpoint, type GetNode, type GetSupportedCCVersion, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type NodeId, type Notification, type NotificationState, type SinglecastCC, type SupervisionResult, type SupportsCC, type ValueMetadataNumeric, type WithAddress } from "@zwave-js/core";
import { Bytes, type BytesView } from "@zwave-js/shared";
import { POLL_VALUE, PhysicalCCAPI, type PollValueImplementation } from "../lib/API.js";
import { CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions } from "../lib/CommandClass.js";
import { NotificationCommand } from "../lib/_Types.js";
import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
import { NotificationCCValues } from "./_CCValues.generated.js";
export { NotificationCCValues };
export declare function shouldAutoCreateSyntheticDoorSensorValue(ctx: GetValueDB, endpoint: EndpointId): boolean;
export declare class NotificationCCAPI extends PhysicalCCAPI {
    supportsCommand(cmd: NotificationCommand): MaybeNotKnown<boolean>;
    protected get [POLL_VALUE](): PollValueImplementation;
    sendReport(options: NotificationCCReportOptions): Promise<SupervisionResult | undefined>;
    get(options: NotificationCCGetOptions): Promise<Pick<NotificationCCReport, "alarmLevel" | "eventParameters" | "notificationEvent" | "notificationStatus" | "sequenceNumber"> | undefined>;
    set(notificationType: number, notificationStatus: boolean): Promise<SupervisionResult | undefined>;
    getSupported(): Promise<Pick<NotificationCCSupportedReport, "supportedNotificationTypes" | "supportsV1Alarm"> | undefined>;
    getSupportedEvents(notificationType: number): Promise<MaybeNotKnown<readonly number[]>>;
}
export declare function getNotificationEnumBehavior(notification: Notification, valueConfig: NotificationState): "none" | "extend" | "replace";
export declare function getNotificationStateValueWithEnum(stateValue: number, enumValue: number): number;
/**
 * Returns the metadata to use for a known notification value.
 * Can be used to extend a previously defined metadata,
 * e.g. for V2 notifications that don't allow discovering supported events.
 */
export declare function getNotificationValueMetadata(previous: ValueMetadataNumeric | undefined, notification: Notification, valueConfig: NotificationState): ValueMetadataNumeric;
export declare class NotificationCC extends CommandClass {
    ccCommand: NotificationCommand;
    determineRequiredCCInterviews(): readonly CommandClasses[];
    private determineNotificationMode;
    /** Whether the node implements push or pull notifications */
    static getNotificationMode(ctx: GetValueDB, node: NodeId): MaybeNotKnown<"push" | "pull">;
    /** Returns the supported notification events for a given notification type */
    static getSupportedNotificationEvents(ctx: GetValueDB, node: NodeId, type: number): MaybeNotKnown<readonly number[]>;
    interview(ctx: InterviewContext): Promise<void>;
    /**
     * Applies the `alarmMapping` compat flag by adding metadata and supported notification
     * types/events for the alarm mapping targets.
     */
    private applyAlarmMappingCompat;
    /**
     * Applies the `remapNotifications` compat flag by modifying the supported notification
     * types/events in cache and creating metadata for remapping targets.
     */
    private applyNotificationRemappings;
    /**
     * Sets idle values for all supported notification variables that have an idle state
     * and don't have a value yet.
     */
    private initNotificationIdleValues;
    refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void>;
    shouldRefreshValues(this: SinglecastCC<this>, ctx: GetValueDB & GetSupportedCCVersion & GetDeviceConfig & GetNode<NodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>>): boolean;
}
export interface NotificationCCSetOptions {
    notificationType: number;
    notificationStatus: boolean;
}
export declare class NotificationCCSet extends NotificationCC {
    constructor(options: WithAddress<NotificationCCSetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): NotificationCCSet;
    notificationType: number;
    notificationStatus: boolean;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export type NotificationCCReportOptions = {
    alarmType?: number;
    alarmLevel?: number;
    notificationType?: number;
    notificationEvent?: number;
    notificationStatus?: number;
    eventParameters?: BytesView;
    sequenceNumber?: number;
};
export declare class NotificationCCReport extends NotificationCC {
    constructor(options: WithAddress<NotificationCCReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): NotificationCCReport;
    persistValues(ctx: PersistValuesContext): boolean;
    alarmType: number | undefined;
    alarmLevel: number | undefined;
    notificationType: number | undefined;
    notificationStatus: boolean | number | undefined;
    notificationEvent: number | undefined;
    eventParameters: BytesView | Duration | Record<string, number> | number | undefined;
    sequenceNumber: number | undefined;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
    private parseEventParameters;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
}
export type NotificationCCGetOptions = {
    alarmType: number;
} | {
    notificationType: number;
    notificationEvent?: number;
};
export declare class NotificationCCGet extends NotificationCC {
    constructor(options: WithAddress<NotificationCCGetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): NotificationCCGet;
    /** Proprietary V1/V2 alarm type */
    alarmType: number | undefined;
    /** Regulated V3+ notification type */
    notificationType: number | undefined;
    notificationEvent: number | undefined;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export interface NotificationCCSupportedReportOptions {
    supportsV1Alarm: boolean;
    supportedNotificationTypes: number[];
}
export declare class NotificationCCSupportedReport extends NotificationCC {
    constructor(options: WithAddress<NotificationCCSupportedReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): NotificationCCSupportedReport;
    supportsV1Alarm: boolean;
    supportedNotificationTypes: number[];
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class NotificationCCSupportedGet extends NotificationCC {
}
export interface NotificationCCEventSupportedReportOptions {
    notificationType: number;
    supportedEvents: number[];
}
export declare class NotificationCCEventSupportedReport extends NotificationCC {
    constructor(options: WithAddress<NotificationCCEventSupportedReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): NotificationCCEventSupportedReport;
    persistValues(ctx: PersistValuesContext): boolean;
    notificationType: number;
    supportedEvents: number[];
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export interface NotificationCCEventSupportedGetOptions {
    notificationType: number;
}
export declare class NotificationCCEventSupportedGet extends NotificationCC {
    constructor(options: WithAddress<NotificationCCEventSupportedGetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): NotificationCCEventSupportedGet;
    notificationType: number;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
//# sourceMappingURL=NotificationCC.d.ts.map