/**
 * Handy Device Implementation
 */
import { DeviceCapability, DeviceInfo, HapticDevice, ScriptData } from "../../core/device-interface";
import { EventEmitter } from "../../core/events";
import { HandySettings } from "./types";
/**
 * Handy configuration options
 */
export interface HandyConfig {
    connectionKey?: string;
    baseV3Url?: string;
    baseV2Url?: string;
    applicationId?: string;
}
/**
 * Handy device implementation
 */
export declare class HandyDevice extends EventEmitter implements HapticDevice {
    private _api;
    private _config;
    private _connectionState;
    private _deviceInfo;
    private _isPlaying;
    private _eventSource;
    readonly id: string;
    readonly name: string;
    readonly type: string;
    readonly capabilities: DeviceCapability[];
    /**
     * Create a new Handy device instance
     * @param config Optional configuration
     */
    constructor(config?: HandyConfig);
    /**
     * Get device connection state
     */
    get isConnected(): boolean;
    /**
     * Get device playback state
     */
    get isPlaying(): boolean;
    /**
     * Connect to the device
     * @param config Optional configuration override
     */
    connect(config?: Partial<HandySettings>): Promise<boolean>;
    /**
     * Disconnect from the device
     */
    disconnect(): Promise<boolean>;
    /**
     * Get current device configuration
     */
    getConfig(): HandySettings;
    /**
     * Update device configuration
     * @param config Partial configuration to update
     */
    updateConfig(config: Partial<HandySettings>): Promise<boolean>;
    /**
     * Load a script for playback
     * @param scriptData Script data to load
     */
    loadScript(scriptData: ScriptData): Promise<{
        success: boolean;
    }>;
    /**
     * Play the loaded script at the specified time
     * @param timeMs Current time in milliseconds
     * @param playbackRate Playback rate (1.0 = normal speed)
     * @param loop Whether to loop the script
     */
    play(timeMs: number, playbackRate?: number, loop?: boolean): Promise<boolean>;
    /**
     * Stop playback
     */
    stop(): Promise<boolean>;
    /**
     * Synchronize device time with provided time
     * @param timeMs Current time in milliseconds
     */
    syncTime(timeMs: number): Promise<boolean>;
    /**
     * Get device-specific information
     */
    getDeviceInfo(): DeviceInfo | null;
    /**
     * Set up event handlers for the device
     */
    private _setupEventHandlers;
    /**
     * Load device settings after connection
     */
    private _loadDeviceSettings;
}
