import { IButtonOptions } from './interfaces/IButton';
import { AppContext } from '../../core';
/**
 * Базовый тип для задания placeholder для кнопок
 */
export type TBtnPayload = Record<string, unknown> | string | null;
/**
 * Интерфейс для кнопок
 */
export interface IButtonType<TButtonPayload = TBtnPayload> {
    /**
     * Тип кнопки.
     * Определяет поведение и внешний вид кнопки на разных платформах.
     */
    type: string | null;
    /**
     * Текст, отображаемый на кнопке.
     */
    title: string | null;
    /**
     * URL для перехода при нажатии на кнопку.
     * Для кнопок-ссылок обязательный параметр.
     */
    url?: string | null;
    /**
     * Произвольные данные, отправляемые при нажатии на кнопку.
     * Используются для передачи дополнительной информации в обработчике.
     */
    payload: TButtonPayload | null;
    /**
     * Флаг, определяющий отображение кнопки как сайджеста.
     * true - интерактивная кнопка
     * false - кнопка-ссылка (сайджест)
     */
    hide: boolean;
    /**
     * Дополнительные параметры кнопки.
     * Могут включать специфичные для платформы настройки.
     */
    options: IButtonOptions;
}
/**
 * Возвращает кнопку в виде сайджеста (ссылки под текстом).
 *
 * @param {AppContext} appContext Контекст приложения
 * @param {string} title Текст кнопки
 * @param {string} [url=''] URL для перехода (должен начинаться с http:// или https://)
 * @param {TButtonPayload} [payload=null] Дополнительные данные для обработки нажатия
 * @param {IButtonOptions} [options={}] Дополнительные параметры:
 * - utmSource: источник перехода
 * - utmMedium: тип рекламного канала
 * - utmCampaign: название рекламной кампании
 *
 * @example
 * ```ts
 * // Простая ссылка
 * const button1 = getButton('Перейти на сайт', 'http://localhost');
 *
 * // Ссылка с UTM-метками
 * const button2 = getButton('Купить', 'http://localhost/product', null, {
 *   utmSource: 'bot',
 *   utmMedium: 'button',
 *   utmCampaign: 'spring_sale'
 * });
 *
 * // Ссылка с дополнительными данными
 * const button3 = getButton('Подробнее', 'http://localhost/article', {
 *   action: 'read',
 *   article_id: 123
 * });
 * ```
 *
 * @returns {IButtonType | null} Возвращается объект, если кнопка добавлена, и null в случае, если переданы некорректные настройки для кнопки
 */
export declare function getLinkButton<TButtonPayload = TBtnPayload>(appContext: AppContext, title: string | null, url?: string | null, payload?: TButtonPayload | null, options?: IButtonOptions): IButtonType<TButtonPayload> | null;
/**
 * Возвращает кнопку в виде интерактивной кнопки.
 *
 * @param {AppContext} appContext Контекст приложения
 * @param {string} title Текст кнопки
 * @param {string} [url=''] URL для перехода
 * @param {TButtonPayload} [payload=null] Дополнительные данные для обработки нажатия.
 *                                        Может быть строкой или объектом.
 * @param {IButtonOptions} [options={}] Дополнительные параметры:
 * - utmSource: источник перехода
 * - utmMedium: тип рекламного канала
 * - utmCampaign: название рекламной кампании
 *
 * @returns {IButtonType | null} Возвращается объект, если кнопка добавлена, и null в случае, если переданы некорректные настройки для кнопки.
 */
export declare function getButton<TButtonPayload = TBtnPayload>(appContext: AppContext, title: string | null, url?: string | null, payload?: TButtonPayload | null, options?: IButtonOptions): IButtonType<TButtonPayload> | null;
