import type { API, Characteristic, DynamicPlatformPlugin, Logging, PlatformAccessory, Service } from 'homebridge';
import { EZVIZAPI } from './api/ezviz-api.js';
import { EZVIZConfig, CameraConfig } from './types/config.js';
import { Credentials } from './types/login.js';
import { ListDevicesResponse } from './types/devices.js';
import { DeviceData } from './types/data.js';
/**
 * EZVIZ Platform for Homebridge
 * Handles device discovery, authentication, and accessory management
 */
export declare class EZVIZPlatform implements DynamicPlatformPlugin {
    readonly log: Logging;
    readonly config: EZVIZConfig;
    readonly api: API;
    readonly Service: typeof Service;
    readonly Characteristic: typeof Characteristic;
    readonly accessories: Map<string, PlatformAccessory>;
    readonly discoveredCacheUUIDs: string[];
    constructor(log: Logging, config: EZVIZConfig, api: API);
    /**
     * Called when Homebridge finishes launching
     * Handles authentication and device discovery
     */
    didFinishLaunching(): Promise<void>;
    /**
     * Authenticates with the EZVIZ API
     * @param ezvizAPI - The EZVIZ API instance
     * @returns Promise resolving to credentials or undefined if authentication fails
     */
    authenticate(ezvizAPI: EZVIZAPI): Promise<Credentials | undefined>;
    /**
     * Configures an accessory from cache
     * @param accessory - The accessory to configure
     */
    configureAccessory(accessory: PlatformAccessory): void;
    /**
     * Discovers and manages EZVIZ devices
     * @param ezvizAPI - The EZVIZ API instance
     */
    discoverDevices(ezvizAPI: EZVIZAPI): Promise<void>;
    /**
     * Creates the appropriate accessory based on device type
     * @param ezvizAPI - The EZVIZ API instance
     * @param accessory - The platform accessory
     * @param deviceType - The type of device
     */
    private createAccessory;
    /**
     * Extracts device data from the API response
     * @param devicesResponse - The API response containing device information
     * @returns Array of processed device data
     */
    extractDevicesData(devicesResponse: ListDevicesResponse): DeviceData[];
    /**
     * Validates camera configuration
     * @param camera - The camera configuration to validate
     * @returns Error message if validation fails, empty string if valid
     */
    cameraConfigErrors(camera: CameraConfig): string;
}
