import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSNumber } from "../Foundation/NSNumber.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSURL } from "../Foundation/NSURL.js";
import type { _MTRAttributeCacheContainer } from "./MTRAttributeCacheContainer.js";
import type { _MTRClusterStateCacheContainer } from "./MTRClusterStateCacheContainer.js";
import type { _MTRDeviceController } from "./MTRDeviceController.js";
import type { _MTRReadParams } from "./MTRReadParams.js";
import type { _MTRSetupPayload } from "./MTRSetupPayload.js";
import type { _MTRSubscribeParams } from "./MTRSubscribeParams.js";
import type { MTRDiagnosticLogType } from "./MTRDiagnosticLogType.js";
import type { MTRTransportType } from "./MTRTransportType.js";
export declare class _MTRBaseDevice extends _NSObject {
    static alloc(): _MTRBaseDevice;
    static new(): _MTRBaseDevice;
    init(): _MTRBaseDevice;
    /**
     * Create a device object with the given node id and controller. This will always succeed, even if there is no such node id on the controller's fabric, but attempts to actually use the MTRBaseDevice will fail (asynchronously) in that case.
     */
    static deviceWithNodeID$controller$(nodeID: _NSNumber, controller: _MTRDeviceController): _MTRBaseDevice;
    /**
     * Subscribe to receive attribute reports for everything (all endpoints, all clusters, all attributes, all events) on the device. A non-nil attribute cache container will cache attribute values, retrievable through the designated attribute cache container. attributeReportHandler will be called any time a data update is available (with a non-nil "value") The array passed to attributeReportHandler will contain MTRAttributeReport instances. Errors for specific paths, not the whole subscription, will be reported via those objects. eventReportHandler will be called any time an event is reported (with a non-nil "value") The array passed to eventReportHandler will contain MTREventReport instances. Errors for specific paths, not the whole subscription, will be reported via those objects. errorHandler will be called any time there is an error for the entire subscription (with a non-nil "error"), and terminate the subscription. This will generally not be invoked if auto-resubscription is enabled, unless there is a fatal error during a resubscription attempt. Both report handlers are not supported over XPC at the moment. The subscriptionEstablished block, if not nil, will be called once the subscription is established. This will be _after_ the first (priming) call to both report handlers. Note that if the MTRSubscribeParams are set to automatically resubscribe this can end up being called more than once. The resubscriptionScheduled block, if not nil, will be called if auto-resubscription is enabled, subscription loss is detected, and a resubscription is scheduled. This can be called multiple times in a row without an intervening subscriptionEstablished call if the resubscription attempts fail.
     */
    subscribeWithQueue$params$clusterStateCacheContainer$attributeReportHandler$eventReportHandler$errorHandler$subscriptionEstablished$resubscriptionScheduled$(queue: _NSObject, params: _MTRSubscribeParams, clusterStateCacheContainer: _MTRClusterStateCacheContainer | null, attributeReportHandler: ((arg0: _NSArray) => void) | null, eventReportHandler: ((arg0: _NSArray) => void) | null, errorHandler: (arg0: _NSError) => void, subscriptionEstablished: (() => void) | null, resubscriptionScheduled: ((arg0: _NSError, arg1: _NSNumber) => void) | null): void;
    /**
     * Reads attributes from the device. Nil values for endpointID, clusterID, attributeID indicate wildcards (e.g. nil attributeID means "read all the attributes from the endpoint(s) and cluster(s) that match endpointID/clusterID"). If all of endpointID, clusterID, attributeID are non-nil, a single attribute will be read. If all of endpointID, clusterID, attributeID are nil, all attributes on the device will be read. A non-nil attributeID along with a nil clusterID will only succeed if the attribute ID is for a global attribute that applies to all clusters. The completion will be called with an error if the entire read interaction fails. Otherwise it will be called with values, which may be empty (e.g. if no paths matched the wildcard) or may include per-path errors if particular paths failed.
     */
    readAttributesWithEndpointID$clusterID$attributeID$params$queue$completion$(endpointID: _NSNumber | null, clusterID: _NSNumber | null, attributeID: _NSNumber | null, params: _MTRReadParams | null, queue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    /**
     * Reads multiple attribute or event paths from the device. Nil is treated as an empty array for attributePaths and eventPaths. Lists of attribute and event paths to read can be provided via attributePaths and eventPaths. The completion will be called with an error if the entire read interaction fails. Otherwise it will be called with an array of values. This array may be empty (e.g. if no paths matched the wildcard paths passed in, or if empty lists of paths were passed in) or may include per-path errors if particular paths failed. If the sum of the lengths of attributePaths and eventPaths exceeds 9, the read may fail due to the device not supporting that many read paths.
     */
    readAttributePaths$eventPaths$params$queue$completion$(attributePaths: _NSArray | null, eventPaths: _NSArray | null, params: _MTRReadParams | null, queue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    /**
     * Write to attribute in a designated attribute path @param value A data-value NSDictionary object as described in MTRDeviceResponseHandler. @param timeoutMs timeout in milliseconds for timed write, or nil. @param completion response handler will receive either values or error. A path-specific error status will get turned into an error passed to the completion, so values will only be passed in when the write succeeds. In that case, values will have the format documented in the definition of MTRDeviceResponseHandler and will be an array with a single element which is a dictionary that has a MTRAttributePathKey entry in it, whose value is the attribute path that was successfully written to.
     */
    writeAttributeWithEndpointID$clusterID$attributeID$value$timedWriteTimeout$queue$completion$(endpointID: _NSNumber, clusterID: _NSNumber, attributeID: _NSNumber, value: NobjcObject, timeoutMs: _NSNumber | null, queue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    /**
     * Invoke a command with a designated command path @param commandFields command fields object. The object must be a data-value NSDictionary object as described in the MTRDeviceResponseHandler. The attribute must be a Structure, i.e., the NSDictionary MTRTypeKey key must have the value MTRStructureValueType. @param timeoutMs timeout in milliseconds for timed invoke, or nil. @param completion response handler will receive either values or error. A path-specific error status from the command invocation will result in an error being passed to the completion, so values will only be passed in when the command succeeds.
     */
    invokeCommandWithEndpointID$clusterID$commandID$commandFields$timedInvokeTimeout$queue$completion$(endpointID: _NSNumber, clusterID: _NSNumber, commandID: _NSNumber, commandFields: NobjcObject, timeoutMs: _NSNumber | null, queue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    /**
     * Subscribes to the specified attributes on the device. Nil values for endpointID, clusterID, attributeID indicate wildcards (e.g. nil attributeID means "subscribe to all the attributes from the endpoint(s) and cluster(s) that match endpointID/clusterID"). If all of endpointID, clusterID, attributeID are non-nil, a single attribute will be subscribed to. If all of endpointID, clusterID, attributeID are nil, all attributes on the device will be subscribed to. A non-nil attributeID along with a nil clusterID will only succeed if the attribute ID is for a global attribute that applies to all clusters. The reportHandler will be called with an error if the subscription fails entirely. The reportHandler will be called with arrays of response-value dictionaries (which may be data or errors) as path-specific data is received. subscriptionEstablished will be called when the subscription is first successfully established (after the initial set of data reports has been delivered to reportHandler). If params allow automatic resubscription, it will be called any time resubscription succeeds.
     */
    subscribeToAttributesWithEndpointID$clusterID$attributeID$params$queue$reportHandler$subscriptionEstablished$(endpointID: _NSNumber | null, clusterID: _NSNumber | null, attributeID: _NSNumber | null, params: _MTRSubscribeParams | null, queue: _NSObject, reportHandler: (arg0: _NSArray, arg1: _NSError) => void, subscriptionEstablished: (() => void) | null): void;
    /**
     * Subscribes to multiple attribute or event paths. Nil is treated as an empty array for attributePaths and eventPaths. Lists of attribute and event paths to subscribe to can be provided via attributePaths and eventPaths. The reportHandler will be called with an error if the subscription fails entirely (including when both attributePaths and eventPaths are empty). The reportHandler will be called with arrays of response-value dictionaries (which may be data or errors) as path-specific data is received. subscriptionEstablished will be called when the subscription is first successfully established (after the initial set of data reports has been delivered to reportHandler). If params allow automatic resubscription, it will be called any time resubscription succeeds. resubscriptionScheduled will be called if subscription drop is detected and params allow automatic resubscription. If the sum of the lengths of attributePaths and eventPaths exceeds 3, the subscribe may fail due to the device not supporting that many paths for a subscription.
     */
    subscribeToAttributePaths$eventPaths$params$queue$reportHandler$subscriptionEstablished$resubscriptionScheduled$(attributePaths: _NSArray | null, eventPaths: _NSArray | null, params: _MTRSubscribeParams | null, queue: _NSObject, reportHandler: (arg0: _NSArray, arg1: _NSError) => void, subscriptionEstablished: (() => void) | null, resubscriptionScheduled: ((arg0: _NSError, arg1: _NSNumber) => void) | null): void;
    /**
     * Deregister all local report handlers for a remote device This method is applicable only for a remote device. For a local device, the stack has to be shutdown to stop report handlers. There could be multiple clients accessing a node through a remote controller object and hence it is not appropriate for one of those clients to shut down the entire stack to stop receiving reports.
     */
    deregisterReportHandlersWithQueue$completion$(queue: _NSObject, completion: () => void): void;
    /**
     * Open a commissioning window on the device. On success, completion will be called on queue with the MTRSetupPayload that can be used to commission the device. @param setupPasscode The setup passcode to use for the commissioning window. See MTRSetupPayload's generateRandomSetupPasscode for generating a valid random passcode. @param discriminator The discriminator to use for the commissionable advertisement. @param duration Duration, in seconds, during which the commissioning window will be open.
     */
    openCommissioningWindowWithSetupPasscode$discriminator$duration$queue$completion$(setupPasscode: _NSNumber, discriminator: _NSNumber, duration: _NSNumber, queue: _NSObject, completion: (arg0: _MTRSetupPayload, arg1: _NSError) => void): void;
    /**
     * Open a commissioning window on the device, using a random setup passcode. On success, completion will be called on queue with the MTRSetupPayload that can be used to commission the device. @param discriminator The discriminator to use for the commissionable advertisement. @param duration Duration, in seconds, during which the commissioning window will be open.
     */
    openCommissioningWindowWithDiscriminator$duration$queue$completion$(discriminator: _NSNumber, duration: _NSNumber, queue: _NSObject, completion: (arg0: _MTRSetupPayload, arg1: _NSError) => void): void;
    /**
     * Reads events from the device. Nil values for endpointID, clusterID, eventID indicate wildcards (e.g. nil eventID means "read all the events from the endpoint(s) and cluster(s) that match endpointID/clusterID"). If all of endpointID, clusterID, eventID are non-nil, all the matching instances of a single event will be read. If all of endpointID, clusterID, eventID are nil, all events on the device will be read. The completion will be called with an error if the entire read interaction fails. Otherwise it will be called with values, which may be empty (e.g. if no paths matched the wildcard) or may include per-path errors if particular paths failed.
     */
    readEventsWithEndpointID$clusterID$eventID$params$queue$completion$(endpointID: _NSNumber | null, clusterID: _NSNumber | null, eventID: _NSNumber | null, params: _MTRReadParams | null, queue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    /**
     * Subscribes to the specified events on the device. Nil values for endpointID, clusterID, eventID indicate wildcards (e.g. nil eventID means "subscribe to all the events from the endpoint(s) and cluster(s) that match endpointID/clusterID"). If all of endpointID, clusterID, eventID are non-nil, a single event will be subscribed to. If all of endpointID, clusterID, eventID are nil, all events on the device will be subscribed to. The reportHandler will be called with an error if the subscription fails entirely. The reportHandler will be called with arrays of response-value dictionaries (which may be data or errors) as path-specific data is received. subscriptionEstablished will be called when the subscription is first successfully established (after the initial set of data reports has been delivered to reportHandler). If params allow automatic resubscription, it will be called any time resubscription succeeds.
     */
    subscribeToEventsWithEndpointID$clusterID$eventID$params$queue$reportHandler$subscriptionEstablished$(endpointID: _NSNumber | null, clusterID: _NSNumber | null, eventID: _NSNumber | null, params: _MTRSubscribeParams | null, queue: _NSObject, reportHandler: (arg0: _NSArray, arg1: _NSError) => void, subscriptionEstablished: (() => void) | null): void;
    /**
     * Download log of the desired type from the device. Note: The consumer of this API should move the file that the url points to or open it for reading before the completion handler returns. Otherwise, the file will be deleted, and the data will be lost. @param type The type of log being requested. This should correspond to a value in the enum MTRDiagnosticLogType. @param timeout The timeout for getting the log. If the timeout expires, completion will be called with whatever has been retrieved by that point (which might be none or a partial log). If the timeout is set to 0, the request will not expire and completion will not be called until the log is fully retrieved or an error occurs. @param queue The queue on which completion will be called. @param completion The completion handler that is called after attempting to retrieve the requested log. - In case of success, the completion handler is called with a non-nil URL and a nil error. - If there is an error, a non-nil error is used and the url can be non-nil too if some logs have already been downloaded.
     */
    downloadLogOfType$timeout$queue$completion$(type: MTRDiagnosticLogType, timeout: number, queue: _NSObject, completion: ((url: _NSURL, error: _NSError) => void) | null): void;
    /** Deprecated MTRBaseDevice APIs. */
    subscribeWithQueue$minInterval$maxInterval$params$cacheContainer$attributeReportHandler$eventReportHandler$errorHandler$subscriptionEstablished$resubscriptionScheduled$(queue: _NSObject, minInterval: number, maxInterval: number, params: _MTRSubscribeParams | null, attributeCacheContainer: _MTRAttributeCacheContainer | null, attributeReportHandler: ((arg0: _NSArray) => void) | null, eventReportHandler: ((arg0: _NSArray) => void) | null, errorHandler: (arg0: _NSError) => void, subscriptionEstablishedHandler: (() => void) | null, resubscriptionScheduledHandler: ((arg0: _NSError, arg1: _NSNumber) => void) | null): void;
    readAttributeWithEndpointId$clusterId$attributeId$params$clientQueue$completion$(endpointId: _NSNumber | null, clusterId: _NSNumber | null, attributeId: _NSNumber | null, params: _MTRReadParams | null, clientQueue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    writeAttributeWithEndpointId$clusterId$attributeId$value$timedWriteTimeout$clientQueue$completion$(endpointId: _NSNumber, clusterId: _NSNumber, attributeId: _NSNumber, value: NobjcObject, timeoutMs: _NSNumber | null, clientQueue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    invokeCommandWithEndpointId$clusterId$commandId$commandFields$timedInvokeTimeout$clientQueue$completion$(endpointId: _NSNumber, clusterId: _NSNumber, commandId: _NSNumber, commandFields: NobjcObject, timeoutMs: _NSNumber | null, clientQueue: _NSObject, completion: (arg0: _NSArray, arg1: _NSError) => void): void;
    subscribeAttributeWithEndpointId$clusterId$attributeId$minInterval$maxInterval$params$clientQueue$reportHandler$subscriptionEstablished$(endpointId: _NSNumber | null, clusterId: _NSNumber | null, attributeId: _NSNumber | null, minInterval: _NSNumber, maxInterval: _NSNumber, params: _MTRSubscribeParams | null, clientQueue: _NSObject, reportHandler: (arg0: _NSArray, arg1: _NSError) => void, subscriptionEstablishedHandler: (() => void) | null): void;
    deregisterReportHandlersWithClientQueue$completion$(queue: _NSObject, completion: () => void): void;
    /**
     * The transport used by the current session with this device, or `MTRTransportTypeUndefined` if no session is currently active.
     */
    sessionTransportType(): MTRTransportType;
}
