import { constants } from './proto';
import Security from './security/security';
import Security0 from './security/security0';
import Security1 from './security/security1';
import Security2 from './security/security2';
import { ESPProvisionerOptions } from './types';
import type { ICmdScanResult, ICmdScanStart } from './prov/scan';
import { ICmdSetConfig } from './prov/config';
declare const WifiStationState: typeof constants.WifiStationState;
export { Security0, Security1, Security2, WifiStationState };
export type { Security2Options } from './security/security2';
export interface IWiFiScanResult {
    /** WiFiScanResult ssid */
    ssid?: Uint8Array | null;
    /** WiFiScanResult channel */
    channel?: number | null;
    /** WiFiScanResult rssi */
    rssi?: number | null;
    /** WiFiScanResult bssid */
    bssid?: Uint8Array | null;
    /** WiFiScanResult auth */
    auth?: constants.WifiAuthMode | null;
}
export declare class ESPProvisioner {
    device: BluetoothDevice | null;
    server: BluetoothRemoteGATTServer | null;
    service: BluetoothRemoteGATTService | null;
    endpoints: Map<string, BluetoothRemoteGATTCharacteristic>;
    private _isConnected;
    deviceNamePrefix: string;
    serviceUUID: string;
    security: Security;
    constructor(options: ESPProvisionerOptions);
    /**
     * Checks if the provisioner is currently connected to a device
     */
    get isConnected(): boolean;
    /**
     * Gets a characteristic by endpoint name
     * @param ep_name Endpoint name
     * @returns Bluetooth characteristic
     */
    getCharacteristic(ep_name: string): BluetoothRemoteGATTCharacteristic;
    /**
     * Writes a value to a characteristic with timeout and retry logic
     * @param ep_name Endpoint name
     * @param data Data to write
     */
    writeValue(ep_name: string, data: Uint8Array): Promise<void>;
    /**
     * Reads a value from a characteristic
     * @param ep_name Endpoint name
     * @returns Read data
     */
    readValue(ep_name: string): Promise<Uint8Array<ArrayBufferLike>>;
    /**
     * Discovers and maps all device characteristics
     */
    private discoverCharacteristics;
    /**
     * Connects to an ESP device
     * @param options Connection options
     * @returns Connected device
     */
    connect(options?: {
        filters: BluetoothLEScanFilter[];
    }): Promise<BluetoothDevice>;
    disconnect(): Promise<void>;
    /**
     * Checks if the provisioner is connected and throws an error if not
     */
    private ensureConnected;
    establishSession(): Promise<void>;
    /**
     * Resets the provisioning state of the device
     */
    ctrlReset(): Promise<void>;
    /**
     * Re-provisions the device
     */
    ctrlReprov(): Promise<void>;
    /**
     * Starts a Wi-Fi scan on the device
     * @param options Scan options
     */
    startScan(options: ICmdScanStart): Promise<void>;
    /**
     * Gets the current scan status
     * @returns Number of networks found
     */
    getScanStatus(): Promise<number>;
    /**
     * Gets scan results from the device
     * @param options Result options
     * @returns Array of Wi-Fi networks
     */
    getScanResults(options: ICmdScanResult): Promise<IWiFiScanResult[]>;
    /**
     * Performs a complete Wi-Fi scan operation
     * @param options Scan options
     * @param timeout Maximum time to wait for scan completion (ms)
     * @returns Array of Wi-Fi networks
     */
    scan(options?: ICmdScanStart): Promise<IWiFiScanResult[]>;
    /**
     * Gets the current Wi-Fi status
     * @returns Wi-Fi status
     */
    getWiFiStatus(): Promise<import("./proto").config.IRespGetStatus>;
    /**
     * Sets Wi-Fi configuration on the device
     * @param options Wi-Fi configuration
     */
    setWiFiConfig(options: ICmdSetConfig): Promise<void>;
    /**
     * Applies the Wi-Fi configuration
     */
    applyWiFiConfig(): Promise<void>;
    /**
     * Waits for Wi-Fi connection status to change
     * @param timeout Maximum time to wait (ms)
     * @returns Wi-Fi status
     */
    waitForWiFiStatus(timeout?: number): Promise<void>;
    /**
     * Complete process to send Wi-Fi credentials and connect
     * @param config Wi-Fi configuration
     * @param timeout Maximum time to wait for connection (ms)
     * @returns Wi-Fi status
     */
    sendCredentials({ ssid, passphrase, bssid, channel }: ICmdSetConfig, timeout?: number): Promise<void>;
    /**
     * Writes a value to a custom endpoint
     * @param ep_name Endpoint name
     * @param value Value to write
     */
    writeValueToEndpoint(ep_name: string, value: Uint8Array): Promise<void>;
    /**
     * Reads a value from a custom endpoint
     * @param ep_name Endpoint name
     * @returns Decrypted value
     */
    readValueFromEndpoint(ep_name: string): Promise<Uint8Array<ArrayBufferLike>>;
}
