import { type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SupervisionResult, Timeout, type ValueID, type WithAddress } from "@zwave-js/core";
import { Bytes } from "@zwave-js/shared";
import { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, SET_VALUE_HOOKS, type SetValueImplementation, type SetValueImplementationHooksFactory } from "../lib/API.js";
import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions } from "../lib/CommandClass.js";
import { LocalProtectionState, ProtectionCommand, RFProtectionState } from "../lib/_Types.js";
import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
import { ProtectionCCValues } from "./_CCValues.generated.js";
export { ProtectionCCValues };
export declare class ProtectionCCAPI extends CCAPI {
    supportsCommand(cmd: ProtectionCommand): MaybeNotKnown<boolean>;
    protected get [SET_VALUE](): SetValueImplementation;
    protected get [POLL_VALUE](): PollValueImplementation;
    protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory;
    isSetValueOptimistic(_valueId: ValueID): boolean;
    get(): Promise<Pick<ProtectionCCReport, "local" | "rf"> | undefined>;
    set(local: LocalProtectionState, rf?: RFProtectionState): Promise<SupervisionResult | undefined>;
    getSupported(): Promise<Pick<ProtectionCCSupportedReport, "supportedLocalStates" | "supportedRFStates" | "supportsExclusiveControl" | "supportsTimeout"> | undefined>;
    getExclusiveControl(): Promise<MaybeNotKnown<number>>;
    setExclusiveControl(nodeId: number): Promise<SupervisionResult | undefined>;
    getTimeout(): Promise<MaybeNotKnown<Timeout>>;
    setTimeout(timeout: Timeout): Promise<SupervisionResult | undefined>;
}
export declare class ProtectionCC extends CommandClass {
    ccCommand: ProtectionCommand;
    interview(ctx: InterviewContext): Promise<void>;
    refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void>;
}
export interface ProtectionCCSetOptions {
    local: LocalProtectionState;
    rf?: RFProtectionState;
}
export declare class ProtectionCCSet extends ProtectionCC {
    constructor(options: WithAddress<ProtectionCCSetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ProtectionCCSet;
    local: LocalProtectionState;
    rf?: RFProtectionState;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export interface ProtectionCCReportOptions {
    local: LocalProtectionState;
    rf?: RFProtectionState;
}
export declare class ProtectionCCReport extends ProtectionCC {
    constructor(options: WithAddress<ProtectionCCReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ProtectionCCReport;
    readonly local: LocalProtectionState;
    readonly rf?: RFProtectionState;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class ProtectionCCGet extends ProtectionCC {
}
export interface ProtectionCCSupportedReportOptions {
    supportsTimeout: boolean;
    supportsExclusiveControl: boolean;
    supportedLocalStates: LocalProtectionState[];
    supportedRFStates: RFProtectionState[];
}
export declare class ProtectionCCSupportedReport extends ProtectionCC {
    constructor(options: WithAddress<ProtectionCCSupportedReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ProtectionCCSupportedReport;
    persistValues(ctx: PersistValuesContext): boolean;
    readonly supportsExclusiveControl: boolean;
    readonly supportsTimeout: boolean;
    readonly supportedLocalStates: LocalProtectionState[];
    readonly supportedRFStates: RFProtectionState[];
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class ProtectionCCSupportedGet extends ProtectionCC {
}
export interface ProtectionCCExclusiveControlReportOptions {
    exclusiveControlNodeId: number;
}
export declare class ProtectionCCExclusiveControlReport extends ProtectionCC {
    constructor(options: WithAddress<ProtectionCCExclusiveControlReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ProtectionCCExclusiveControlReport;
    readonly exclusiveControlNodeId: number;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class ProtectionCCExclusiveControlGet extends ProtectionCC {
}
export interface ProtectionCCExclusiveControlSetOptions {
    exclusiveControlNodeId: number;
}
export declare class ProtectionCCExclusiveControlSet extends ProtectionCC {
    constructor(options: WithAddress<ProtectionCCExclusiveControlSetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ProtectionCCExclusiveControlSet;
    exclusiveControlNodeId: number;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export interface ProtectionCCTimeoutReportOptions {
    timeout: Timeout;
}
export declare class ProtectionCCTimeoutReport extends ProtectionCC {
    constructor(options: WithAddress<ProtectionCCTimeoutReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ProtectionCCTimeoutReport;
    readonly timeout: Timeout;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class ProtectionCCTimeoutGet extends ProtectionCC {
}
export interface ProtectionCCTimeoutSetOptions {
    timeout: Timeout;
}
export declare class ProtectionCCTimeoutSet extends ProtectionCC {
    constructor(options: WithAddress<ProtectionCCTimeoutSetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): ProtectionCCTimeoutSet;
    timeout: Timeout;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
//# sourceMappingURL=ProtectionCC.d.ts.map