/**
 * BACnet object implementation module
 *
 * This module provides the base implementation for BACnet objects,
 * which are the core components of BACnet devices.
 *
 * @module
 */
import { AsyncEventEmitter, type EventMap } from '../../events.js';
import { type BACNetAppData, type BACNetObjectID, type BACNetPropertyID, type BACNetReadAccess, ObjectType, EventState, Reliability, ApplicationTag, PropertyIdentifier } from '@innovation-system/node-bacnet';
import type { ReadPropertyMultipleContent } from '@innovation-system/node-bacnet/dist/lib/EventTypes.js';
import { BDAbstractProperty, BDSingletProperty, BDArrayProperty } from '../../properties/index.js';
/**
 * Events that can be emitted by a BACnet object
 */
export interface BDObjectEvents extends EventMap {
    /** Emitted after a property value has changed */
    aftercov: [object: BDObject, property: BDAbstractProperty<any, any, any>, newValue: BACNetAppData | BACNetAppData[]];
}
/**
 * Base class for all BACnet objects
 *
 * This class implements the core functionality required by all BACnet objects
 * according to the BACnet specification. It manages object properties and
 * handles property read/write operations and CoV notifications.
 *
 * @extends AsyncEventEmitter<BDObjectEvents>
 */
export declare class BDObject extends AsyncEventEmitter<BDObjectEvents> {
    #private;
    /** The unique identifier for this object (type and instance number) */
    readonly identifier: BACNetObjectID;
    readonly objectName: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly objectType: BDSingletProperty<ApplicationTag.ENUMERATED, ObjectType>;
    readonly objectIdentifier: BDSingletProperty<ApplicationTag.OBJECTIDENTIFIER>;
    readonly propertyList: BDArrayProperty<ApplicationTag.ENUMERATED, PropertyIdentifier>;
    readonly description: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly outOfService: BDSingletProperty<ApplicationTag.BOOLEAN>;
    readonly statusFlags: BDSingletProperty<ApplicationTag.BIT_STRING>;
    readonly eventState: BDSingletProperty<ApplicationTag.ENUMERATED, EventState>;
    readonly reliability: BDSingletProperty<ApplicationTag.ENUMERATED, Reliability>;
    /**
     * Creates a new BACnet object
     *
     * @param type - The BACnet object type
     * @param instance - The instance number for this object
     * @param name - The name of this object
     */
    constructor(type: ObjectType, instance: number, name: string, description?: string);
    /**
     * Adds a property to this object
     *
     * This method registers a new property with the object and sets up
     * event subscriptions for property value changes.
     *
     * @param property - The property to add
     * @returns The added property
     * @throws Error if a property with the same identifier already exists
     * @typeParam T - The specific BACnet property type
     */
    addProperty<T extends BDAbstractProperty<any, any, any>>(property: T): T;
    /**
     * Writes a value to a property
     *
     * This internal method is used to handle write operations from the BACnet network.
     *
     * @param identifier - The identifier of the property to write
     * @param value - The value to write to the property
     * @throws BACnetError if the property does not exist
     * @internal
     */
    ___writeProperty(identifier: BACNetPropertyID, value: BACNetAppData | BACNetAppData[]): Promise<void>;
    /**
     * Reads a value from a property
     *
     * This internal method is used to handle read operations from the BACnet network.
     *
     * @param req - The read property request
     * @returns The property value
     * @throws BACnetError if the property does not exist
     * @internal
     */
    ___readProperty(identifier: BACNetPropertyID): Promise<BACNetAppData | BACNetAppData[]>;
    /**
     * Reads all properties from this object
     *
     * This internal method is used to handle ReadPropertyMultiple operations
     * when the ALL property identifier is used.
     *
     * @returns An object containing all property values
     * @internal
     */
    ___readPropertyMultipleAll(): Promise<BACNetReadAccess>;
    /**
     * Reads multiple properties from this object
     *
     * This internal method is used to handle ReadPropertyMultiple operations
     * from the BACnet network.
     *
     * @param identifiers - Array of property identifiers to read
     * @returns An object containing the requested property values
     * @internal
     */
    ___readPropertyMultiple(identifiers: ReadPropertyMultipleContent['payload']['properties'][number]['properties']): Promise<BACNetReadAccess>;
}
//# sourceMappingURL=object.d.ts.map