import type { Logger } from 'homebridge';
/**
 * KEF Speaker states and interfaces
 */
export interface SpeakerStatus {
    power: 'powerOn' | 'standby';
    source: string;
    volume: number;
    muted: boolean;
    isPlaying: boolean;
    songInfo?: {
        title?: string;
        artist?: string;
        album?: string;
        coverUrl?: string;
    };
    songLength?: number;
    songProgress?: number;
}
export interface SpeakerChange {
    power?: 'powerOn' | 'standby';
    source?: string;
    volume?: number;
    muted?: boolean;
    isPlaying?: boolean;
    songInfo?: {
        title?: string;
        artist?: string;
        album?: string;
        coverUrl?: string;
    };
    songLength?: number;
    songProgress?: number;
}
/**
 * KEF Speaker Connector
 * Based on pykefcontrol Python library
 */
export declare class KefConnector {
    private readonly host;
    private readonly log;
    private readonly baseUrl;
    constructor(host: string, log: Logger);
    /**
     * Power control
     */
    powerOn(): Promise<void>;
    shutdown(): Promise<void>;
    /**
     * Volume control
     */
    getVolume(): Promise<number>;
    setVolume(volume: number): Promise<void>;
    mute(): Promise<void>;
    unmute(previousVolume: number): Promise<void>;
    /**
     * Source control
     */
    getSource(): Promise<string>;
    setSource(source: string): Promise<void>;
    /**
     * Status control
     */
    getStatus(): Promise<'powerOn' | 'standby'>;
    setStatus(status: 'powerOn' | 'standby'): Promise<void>;
    /**
     * Playback control
     */
    togglePlayPause(): Promise<void>;
    nextTrack(): Promise<void>;
    previousTrack(): Promise<void>;
    private trackControl;
    /**
     * Media information
     */
    getPlayerData(): Promise<any>;
    getSongInformation(): Promise<{
        title?: string;
        artist?: string;
        album?: string;
        coverUrl?: string;
    }>;
    isPlaying(): Promise<boolean>;
    getSongLength(): Promise<number | undefined>;
    getSongProgress(): Promise<number>;
    /**
     * Speaker information
     */
    getSpeakerName(): Promise<string>;
    getMacAddress(): Promise<string>;
    getSpeakerModel(): Promise<string>;
    getFirmwareVersion(): Promise<string>;
    private extractSongInfo;
    /**
     * Get complete speaker status for periodic checking
     */
    getCompleteStatus(): Promise<SpeakerStatus>;
    /**
     * Check if speaker status has changed since last check
     */
    checkForChanges(lastStatus: SpeakerStatus): Promise<SpeakerChange>;
    /**
     * API request helper
     */
    private apiRequest;
}
