import { AnsiLogger } from 'matterbridge/logger';
import { Config, EntityName } from './config-types.js';
import { DysonMqttLike } from './dyson-mqtt.js';
import { MatterbridgeEndpoint } from 'matterbridge';
import { Constructor } from './utils.js';
import { Changed } from './decorator-changed.js';
import { DeviceConfigMqtt } from './dyson-mqtt-client.js';
export interface DysonDeviceModel {
    type: string;
    number: string;
    name: string;
}
export type DysonDeviceConstructorParams<MQTT extends DysonMqttLike = DysonMqttLike> = [
    log: AnsiLogger,
    config: Config,
    device: DeviceConfigMqtt,
    mqtt: MQTT
];
export interface DysonDeviceConstructor<MQTT extends DysonMqttLike = DysonMqttLike, Device extends DysonDevice<MQTT> = DysonDevice<MQTT>> {
    new (...args: DysonDeviceConstructorParams<MQTT>): Device;
    readonly mqttConstructor: Constructor<MQTT>;
}
export declare abstract class DysonDevice<MQTT extends DysonMqttLike = DysonMqttLike> {
    readonly log: AnsiLogger;
    readonly config: Config;
    readonly device: DeviceConfigMqtt;
    readonly mqtt: MQTT;
    static readonly model: DysonDeviceModel;
    static readonly filters: {
        hepa: string[];
        carbon?: string[];
    };
    static readonly mqttConstructor: Constructor<DysonMqttLike>;
    changed: Changed;
    constructor(log: AnsiLogger, config: Config, device: DeviceConfigMqtt, mqtt: MQTT);
    abstract getEntities(): {
        name: EntityName;
        description: string;
    }[];
    abstract getEndpoints(validatedNames: EntityName[]): MatterbridgeEndpoint[];
    abstract start(): Promise<void>;
    stop(): Promise<void>;
    get uniqueId(): string;
    get classStatic(): typeof DysonDevice;
    get modelName(): string;
    get modelNumber(): string;
    get deviceName(): string;
    get serialNumber(): string;
}
//# sourceMappingURL=dyson-device-base.d.ts.map