import type { API, HAP } from "homebridge";
import type { ProtectDeviceConfig, ProtectNvrConfig, ProtectState } from "unifi-protect";
import type { HomebridgePluginLogging } from "homebridge-plugin-utils";
import type { ProtectAccessory } from "../types.ts";
import type { ProtectNvr } from "../nvr/nvr.ts";
import type { ProtectPlatform } from "../platform.ts";
interface ObservedSlice<T> {
    readonly key: string;
    readonly selector: (state: ProtectState) => T;
    readonly title: string;
}
export declare abstract class ProtectBase {
    readonly api: API;
    protected readonly hap: HAP;
    readonly log: HomebridgePluginLogging;
    readonly nvr: ProtectNvr;
    readonly platform: ProtectPlatform;
    constructor(nvr: ProtectNvr);
    protected setInfo(accessory: ProtectAccessory, device: ProtectDeviceConfig | ProtectNvrConfig): boolean;
    get name(): string;
    protected get logName(): string;
    protected get observeSignal(): AbortSignal;
    protected onObserverWake(_key: string): void;
    protected get recordPresent(): boolean;
    protected observeState<T>(slice: ObservedSlice<T>, handler: (value: T) => void): void;
    protected get mqttId(): string;
    protected publish(topic: string, message: string): void;
    protected subscribeGet(topic: string, type: string, getValue: () => string): void;
    protected subscribeSet(topic: string, type: string, setValue: (value: string, rawValue: string) => Promise<void> | void): void;
    protected unsubscribe(topic: string): void;
    protected runDeviceCommand(action: string, command: () => Promise<unknown>): Promise<boolean>;
}
export {};
//# sourceMappingURL=device-base.d.ts.map