import { API, Characteristic, DynamicPlatformPlugin, Logging, PlatformAccessory, Service, WithUUID } from 'homebridge';
import { Accessory } from 'hap-nodejs';
import { BaseDevice, BasePlatformConfig, HomebridgeContextProps, PlatformSettings } from '../types';
declare class HomebridgeContextProxy implements HomebridgeContextProps {
    readonly context: HomebridgeContextProps;
    constructor(context: HomebridgeContextProps);
    get log(): Logging;
    get api(): API;
    get Characteristic(): typeof Characteristic;
    get Service(): typeof Service;
    get Accessory(): typeof Accessory;
}
export declare class HomebridgeAccessoryWrapper<Device> extends HomebridgeContextProxy {
    readonly accessory: PlatformAccessory;
    readonly device: Device;
    constructor(context: HomebridgeContextProps, accessory: PlatformAccessory, device: Device);
    getDisplayName(): string;
    getService<T extends WithUUID<typeof Service>>(serviceType: T, displayName: string, subType: string): Service;
    removeService<T extends WithUUID<typeof Service>>(serviceType: T, subType: string): void;
    getServices<T extends WithUUID<typeof Service>>(serviceType: T, condition: (service: Service) => boolean): Service[];
}
export declare abstract class HomebridgePlatform<Config extends BasePlatformConfig, Device extends BaseDevice, AccessoryWrapper extends HomebridgeAccessoryWrapper<Device>> extends HomebridgeContextProxy implements DynamicPlatformPlugin {
    protected readonly config: Config;
    protected readonly settings: PlatformSettings;
    protected readonly accessories: PlatformAccessory[];
    protected accessoryWrappers: AccessoryWrapper[];
    protected constructor(logger: Logging, config: Config, api: API);
    protected initPlatformConfig(config?: Config): Config;
    protected abstract getDefaultPlatformConfig(): Config | undefined;
    protected abstract initPlatformSettings(): PlatformSettings;
    protected abstract getAccessoryWrapperConstructorForDevice(device: Device): HomebridgeAccessoryWrapperConstructor<AccessoryWrapper, Device> | undefined;
    protected abstract searchDevices(): Promise<Device[]>;
    protected main(): void;
    protected shutdown(): void;
    protected searchAccessories(): Promise<AccessoryWrapper[]>;
    protected accessoryFromDevice(device: Device): AccessoryWrapper | undefined;
    configureAccessory(accessory: PlatformAccessory): void;
    protected clearUnreachableAccessories(): void;
}
export declare type HomebridgeAccessoryWrapperConstructor<AccessoryWrapper extends HomebridgeAccessoryWrapper<Device>, Device extends BaseDevice> = {
    new (context: HomebridgeContextProps, accessory: PlatformAccessory, device: Device): AccessoryWrapper;
};
export {};
//# sourceMappingURL=class-helper.d.ts.map