import { TapoCredentials, TapoApiRequest, TapoApiResponse, TapoDeviceInfo } from '../types';
import { ConnectionManager } from '../core/connection-manager';
import { SessionManager } from '../core/session-manager';
import { ProtocolSelector, ProtocolType } from '../core/protocol-selector';
import { RequestManager } from '../core/request-manager';
import { DeviceController } from '../controllers/device-controller';
import { EnergyController } from '../controllers/energy-controller';
import { LightingController } from '../controllers/lighting-controller';
export interface DeviceCapabilities {
    hasEnergyMonitoring: boolean;
    hasBrightnessControl: boolean;
    hasColorControl: boolean;
    hasColorTemperature: boolean;
    hasLightEffects: boolean;
}
/**
 * Base device class using composition pattern
 * Single responsibility: Device lifecycle and controller coordination
 */
export declare abstract class BaseDevice {
    protected readonly ip: string;
    protected readonly credentials: TapoCredentials;
    protected readonly deviceModel: string;
    protected connectionManager: ConnectionManager;
    protected sessionManager: SessionManager;
    protected protocolSelector: ProtocolSelector;
    protected requestManager: RequestManager;
    protected deviceController: DeviceController;
    protected energyController?: EnergyController;
    protected lightingController?: LightingController;
    protected capabilities: DeviceCapabilities;
    protected isInitialized: boolean;
    constructor(ip: string, credentials: TapoCredentials, deviceModel: string);
    /**
     * Connect to the device
     */
    connect(): Promise<void>;
    /**
     * Disconnect from the device
     */
    disconnect(): Promise<void>;
    /**
     * Send request through the request manager
     */
    protected sendRequest(request: TapoApiRequest): Promise<TapoApiResponse>;
    /**
     * Configure request executor for the request manager
     */
    protected setRequestExecutor(executor: (request: TapoApiRequest) => Promise<TapoApiResponse>): void;
    turnOn(): Promise<void>;
    turnOff(): Promise<void>;
    getDeviceInfo(): Promise<TapoDeviceInfo>;
    setAlias(alias: string): Promise<void>;
    ping(): Promise<boolean>;
    getEnergyUsage(): Promise<any>;
    getCurrentPower(): Promise<number>;
    setBrightness(brightness: number): Promise<void>;
    setColorHSV(hue: number, saturation: number, brightness?: number): Promise<void>;
    setColorRGB(red: number, green: number, blue: number, brightness?: number): Promise<void>;
    setNamedColor(colorName: string, brightness?: number): Promise<void>;
    setColorTemperature(temperature: number, brightness?: number): Promise<void>;
    getCapabilities(): DeviceCapabilities;
    isConnected(): boolean;
    getDeviceModel(): string;
    getDeviceIP(): string;
    /**
     * Determine device capabilities based on model
     */
    protected determineCapabilities(deviceModel: string): DeviceCapabilities;
    /**
     * Check if device supports light effects
     */
    protected supportsLightEffects(deviceModel: string): boolean;
    /**
     * Initialize session based on protocol type
     */
    protected abstract initializeSession(protocol: ProtocolType): Promise<void>;
    /**
     * Cleanup resources
     */
    protected cleanup(): Promise<void>;
    /**
     * Handle session refresh
     */
    protected refreshSession(): Promise<void>;
}
