import { IButtonType } from './Button';
import { IButtonOptions } from './interfaces/IButton';
import { AppContext, TButtonProcessing } from '../../core';
/**
 * Дополнительные данные для кнопки
 */
export type TButtonPayload = Record<string, unknown> | string;
/**
 * @class Buttons
 * Класс для управления коллекцией кнопок и их отображением на различных платформах.
 *
 * Класс предоставляет функциональность для:
 * - Создания и управления коллекцией кнопок
 * - Адаптации кнопок под различные платформы
 * - Поддержки различных типов кнопок (интерактивные, ссылки)
 */
export declare class Buttons {
    #private;
    /**
     * Константа для создания кнопки в виде ссылки (сайджест).
     */
    static readonly B_LINK: boolean;
    /**
     * Константа для создания кнопки в виде интерактивной кнопки.
     */
    static readonly B_BTN: boolean;
    /**
     * Массив объектов IButtonType, представляющих все кнопки в коллекции.
     * @see IButtonType
     */
    buttons: IButtonType[];
    /**
     * Создает новый экземпляр коллекции кнопок.
     * Инициализирует все массивы и устанавливает тип кнопок по умолчанию для Алисы.
     * @param appContext Контекст приложения
     * ⚠️ Обычно НЕ создаётся вручную — автоматически передаётся через контроллер:
     * ```ts
     * // Правильно — через контроллер:
     * this.buttons.addBtn('caption');
     *
     * // НЕ рекомендуется — ручное создание:
     * new Buttons(this.appContext); // appContext берётся из контроллера
     * ```
     */
    constructor(appContext: AppContext);
    /**
     * Устанавливает контекст приложения.
     * @param appContext
     */
    setAppContext(appContext: AppContext): this;
    /**
     * Очищает массив кнопок.
     * @returns {void}
     */
    clear(): void;
    /**
     * Добавляет интерактивную кнопку в коллекцию.
     *
     * @param {string} title - Текст кнопки
     * @param {string} [url=''] - URL для перехода
     * @param {TButtonPayload} [payload=''] - Дополнительные данные
     * @param {IButtonOptions} [options={}] - Дополнительные параметры
     * @returns {Buttons}
     *
     * @example
     * ```ts
     * // Простая кнопка
     * buttons.addBtn('Нажми меня');
     *
     * // Кнопка с URL и payload
     * buttons.addBtn('Перейти', 'http://localhost', { action: 'navigate' });
     * ```
     */
    addBtn(title: string | null, url?: string | null, payload?: TButtonPayload, options?: IButtonOptions): this;
    /**
     * Добавляет кнопку-ссылку в коллекцию.
     *
     * @param {string} title - Текст кнопки
     * @param {string} [url=''] - URL для перехода
     * @param {TButtonPayload} [payload=''] - Дополнительные данные
     * @param {IButtonOptions} [options={}] - Дополнительные параметры
     * @returns {Buttons}
     *
     * @example
     * ```ts
     * // Простая ссылка
     * buttons.addLink('Перейти на сайт', 'http://localhost');
     *
     * // Ссылка с payload
     * buttons.addLink('Документация', 'http://localhost', { section: 'api' });
     * ```
     */
    addLink(title: string | null, url?: string, payload?: TButtonPayload, options?: IButtonOptions): this;
    /**
     * Возвращает массив кнопок, адаптированный для указанной платформы.
     *
     * @param buttonProcessing
     */
    getButtons<T = unknown, TType = Record<string, unknown> | string | null>(buttonProcessing: TButtonProcessing<T | null, TType>): T | null;
    /**
     * Возвращает JSON-представление кнопок для указанной платформы.
     *
     * @param buttonProcessing - Тип кнопок (платформа)
     */
    getButtonJson<T = unknown, TType = Record<string, unknown> | string | null>(buttonProcessing: TButtonProcessing<T | null, TType>): string | null;
}
