import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _MTRDeviceController } from "./MTRDeviceController.js";
import type { _MTRDeviceControllerFactoryParams } from "./MTRDeviceControllerFactoryParams.js";
import type { _MTRDeviceControllerStartupParams } from "./MTRDeviceControllerStartupParams.js";
export declare class _MTRDeviceControllerFactory extends _NSObject {
    static alloc(): _MTRDeviceControllerFactory;
    static new(): _MTRDeviceControllerFactory;
    init(): _MTRDeviceControllerFactory;
    /**
     * Return the single MTRDeviceControllerFactory we support existing. It starts off in a "not started" state.
     */
    static sharedInstance(): _MTRDeviceControllerFactory;
    /**
     * Start the controller factory. Repeated calls to startControllerFactory without calls to stopControllerFactory in between are NO-OPs. Use the isRunning property to check whether the controller factory needs to be started up. data needed to start up the controller factory. Whether startup succeded.
     */
    startControllerFactory$error$(startupParams: _MTRDeviceControllerFactoryParams, error: NobjcObject | null): boolean;
    /**
     * Stop the controller factory. This will shut down any outstanding controllers as part of the factory stopping. Repeated calls to stopControllerFactory without calls to startControllerFactory in between are NO-OPs.
     */
    stopControllerFactory(): void;
    /**
     * Create a MTRDeviceController on an existing fabric. Returns nil on failure. This method will fail if there is no such fabric or if there is already a controller started for that fabric. The fabric is identified by the root public key and fabric id in the startupParams. This method can only be used if the factory was initialized with storage. When using per-controller storage, use [MTRDeviceController initWithParameters:error:].
     */
    createControllerOnExistingFabric$error$(startupParams: _MTRDeviceControllerStartupParams, error: NobjcObject | null): _MTRDeviceController | null;
    /**
     * Create a MTRDeviceController on a new fabric. Returns nil on failure. This method will fail if the given fabric already exists. The fabric is identified by the root public key and fabric id in the startupParams. This method can only be used if the factory was initialized with storage. When using per-controller storage, use [MTRDeviceController initWithParameters:error:].
     */
    createControllerOnNewFabric$error$(startupParams: _MTRDeviceControllerStartupParams, error: NobjcObject | null): _MTRDeviceController | null;
    /**
     * If possible, pre-warm the Matter stack for setting up a commissioning session. This may be called before -[MTRDeviceController setupCommissioningSessionWithPayload:] if it is known that a commissioning attempt will soon take place, but the commissioning payload is not known yet. The controller factory must be running for pre-warming to take place. Pre-warming can take place before any controllers are started.
     */
    preWarmCommissioningSession(): void;
    /**
     * If true, the factory is in a state where it can create controllers: startControllerFactory has been called, but stopControllerFactory has not been called since then.
     */
    running(): boolean;
    /**
     * Returns the list of MTRFabricInfo representing the fabrics the MTRDeviceControllerFactory knows about and the corresponding node identities of the controller factory on those fabrics. Returns nil if the factory is not running or if there is an error reading fabric information. All entries in this list will have a non-nil rootCertificate.
     */
    knownFabrics(): _NSArray | null;
}
