import { Duration, type GetValueDB, type MaybeNotKnown, type MaybeUnknown, type MessageOrCCLogEntry, type SupervisionResult, 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 { LevelChangeDirection, MultilevelSwitchCommand, SwitchType } from "../lib/_Types.js";
import type { CCEncodingContext, CCParsingContext } from "../lib/traits.js";
import { MultilevelSwitchCCValues } from "./_CCValues.generated.js";
export { MultilevelSwitchCCValues };
export declare class MultilevelSwitchCCAPI extends CCAPI {
    supportsCommand(cmd: MultilevelSwitchCommand): MaybeNotKnown<boolean>;
    get(): Promise<Pick<MultilevelSwitchCCReport, "currentValue" | "duration" | "targetValue"> | undefined>;
    /**
     * Sets the switch to a new value
     * @param targetValue The new target value for the switch
     * @param duration The duration after which the target value should be reached. Can be a Duration instance or a user-friendly duration string like `"1m17s"`. Only supported in V2 and above.
     * @returns A promise indicating whether the command was completed
     */
    set(targetValue: number, duration?: Duration | string): Promise<SupervisionResult | undefined>;
    startLevelChange(options: MultilevelSwitchCCStartLevelChangeOptions): Promise<SupervisionResult | undefined>;
    stopLevelChange(): Promise<SupervisionResult | undefined>;
    getSupported(): Promise<MaybeNotKnown<SwitchType>>;
    protected get [SET_VALUE](): SetValueImplementation;
    protected [SET_VALUE_HOOKS]: SetValueImplementationHooksFactory;
    protected get [POLL_VALUE](): PollValueImplementation;
}
export declare class MultilevelSwitchCC extends CommandClass {
    ccCommand: MultilevelSwitchCommand;
    interview(ctx: InterviewContext): Promise<void>;
    refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void>;
    setMappedBasicValue(ctx: GetValueDB, value: number): boolean;
    protected createMetadataForLevelChangeActions(ctx: GetValueDB, switchType?: SwitchType): void;
}
export interface MultilevelSwitchCCSetOptions {
    targetValue: number;
    duration?: Duration | string;
}
export declare class MultilevelSwitchCCSet extends MultilevelSwitchCC {
    constructor(options: WithAddress<MultilevelSwitchCCSetOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCSet;
    targetValue: number;
    duration: Duration | undefined;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export interface MultilevelSwitchCCReportOptions {
    currentValue?: MaybeUnknown<number>;
    targetValue?: MaybeUnknown<number>;
    duration?: Duration | string;
}
export declare class MultilevelSwitchCCReport extends MultilevelSwitchCC {
    constructor(options: WithAddress<MultilevelSwitchCCReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCReport;
    targetValue: MaybeUnknown<number> | undefined;
    duration: Duration | undefined;
    currentValue: MaybeUnknown<number> | undefined;
    persistValues(ctx: PersistValuesContext): boolean;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class MultilevelSwitchCCGet extends MultilevelSwitchCC {
}
export type MultilevelSwitchCCStartLevelChangeOptions = {
    direction: keyof typeof LevelChangeDirection;
} & ({
    ignoreStartLevel: true;
    startLevel?: number;
} | {
    ignoreStartLevel: false;
    startLevel: number;
}) & {
    duration?: Duration | string;
};
export declare class MultilevelSwitchCCStartLevelChange extends MultilevelSwitchCC {
    constructor(options: WithAddress<MultilevelSwitchCCStartLevelChangeOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCStartLevelChange;
    duration: Duration | undefined;
    startLevel: number;
    ignoreStartLevel: boolean;
    direction: keyof typeof LevelChangeDirection;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class MultilevelSwitchCCStopLevelChange extends MultilevelSwitchCC {
}
export interface MultilevelSwitchCCSupportedReportOptions {
    switchType: SwitchType;
}
export declare class MultilevelSwitchCCSupportedReport extends MultilevelSwitchCC {
    constructor(options: WithAddress<MultilevelSwitchCCSupportedReportOptions>);
    static from(raw: CCRaw, ctx: CCParsingContext): MultilevelSwitchCCSupportedReport;
    readonly switchType: SwitchType;
    persistValues(ctx: PersistValuesContext): boolean;
    serialize(ctx: CCEncodingContext): Promise<Bytes>;
    toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
}
export declare class MultilevelSwitchCCSupportedGet extends MultilevelSwitchCC {
}
//# sourceMappingURL=MultilevelSwitchCC.d.ts.map