import { WebSocketClient, WebSocketClientOptions } from '../utils/websocket-client.js';
import { WebSocketNamespace } from '../constants/websocket-namespaces.constants.js';
import { Logger, LogFunction } from '../utils/logger.js';
import { SessionManager } from '../utils/session-manager.js';
import { PingPongManager } from '../utils/ping-pong-manager.js';
import { ConnectionStateManager } from '../utils/connection-state-manager.js';
/**
 * Опции базового WebSocket клиента
 */
export interface BaseWebSocketClientOptions extends Omit<WebSocketClientOptions, 'logger'> {
    /** Логгер (объект или функция) */
    logger?: Logger | LogFunction;
    /** API ключ для аутентификации */
    apiKey?: string;
    /** Включить автоматическое ping/pong */
    enableAutoPing?: boolean;
    /** Интервал ping в миллисекундах */
    pingInterval?: number;
    /** Таймаут ожидания pong в миллисекундах */
    pingTimeoutThreshold?: number;
    /** Включить сохранение сессий */
    enableSessionPersistence?: boolean;
    /** Стратегия переподключения */
    reconnectStrategy?: 'linear' | 'exponential' | 'fibonacci';
    /** Задержка перед повторной попыткой подключения в миллисекундах */
    retryDelay?: number;
    /** Максимальная задержка перед повторной попыткой подключения в миллисекундах */
    maxRetryDelay?: number;
}
/**
 * Базовый абстрактный класс для всех WebSocket клиентов
 */
export declare abstract class BaseWebSocketClient {
    /** Базовый URL API */
    protected readonly baseURL: string;
    /** Опции клиента */
    protected readonly options: BaseWebSocketClientOptions;
    /** Пространство имен WebSocket */
    protected readonly namespace: WebSocketNamespace;
    /** WebSocket клиент */
    protected client: WebSocketClient | null;
    /** Логгер */
    protected readonly logger: Logger;
    /** Менеджер сессий */
    protected readonly sessionManager: SessionManager;
    /** Менеджер ping/pong */
    protected readonly pingPongManager: PingPongManager;
    /** Менеджер состояния подключения */
    protected readonly connectionStateManager: ConnectionStateManager;
    /**
     * Создает новый базовый WebSocket клиент
     * @param {WebSocketNamespace} namespace Пространство имен WebSocket
     * @param {string} baseURL Базовый URL API
     * @param {BaseWebSocketClientOptions} options Опции клиента
     */
    constructor(namespace: WebSocketNamespace, baseURL: string, options?: BaseWebSocketClientOptions);
    /**
     * Подключается к серверу WebSocket
     * @param {Record<string, any>} [params={}] Дополнительные параметры для подключения
     * @returns {Promise<boolean>} Успешность подключения
     */
    connect(params?: Record<string, any>): Promise<boolean>;
    /**
     * Формирует URL для подключения
     * @param {Record<string, any>} params Параметры для подключения
     * @returns {string} URL для подключения
     */
    protected buildConnectionUrl(params: Record<string, any>): string;
    /**
     * Устанавливает обработчики событий для WebSocket клиента
     */
    protected setupEventHandlers(): void;
    /**
     * Отправляет аутентификационные данные на сервер
     */
    protected authenticate(): void;
    /**
     * Отключается от сервера WebSocket
     */
    disconnect(): void;
    /**
     * Проверяет, подключен ли клиент к серверу
     * @returns {boolean} true, если клиент подключен
     */
    isConnected(): boolean;
    /**
     * Получает ID сокета
     * @returns {string | null} ID сокета или null, если не подключен
     */
    getSocketId(): string | null;
    /**
     * Отправляет событие на сервер
     * @param {string} eventType Тип события
     * @param {any} [data] Данные события
     * @returns {boolean} Успешность отправки
     */
    send(eventType: string, data?: any): boolean;
    /**
     * Отправляет событие и ожидает ответа
     * @param {string} eventType Тип события
     * @param {any} data Данные события
     * @param {number} [timeout=5000] Таймаут ожидания ответа в миллисекундах
     * @returns {Promise<any>} Ответ сервера
     */
    emitWithAck(eventType: string, data: any, timeout?: number): Promise<any>;
    /**
     * Добавляет обработчик события
     * @param {string} eventType Тип события
     * @param {(data: any) => void} handler Обработчик события
     */
    on(eventType: string, handler: (data: any) => void): void;
    /**
     * Удаляет обработчик события
     * @param {string} eventType Тип события
     * @param {(data: any) => void} [handler] Обработчик события (если не указан, удаляются все обработчики)
     */
    off(eventType: string, handler?: (data: any) => void): void;
}
//# sourceMappingURL=base-ws-client.d.ts.map