import { ImageTokens, SoundTokens } from '../../../models';
import { BotController } from '../../../controller';
import { ISoundInfo } from '../../../core';
import { IButtonType, IEffect, ISound } from '../../../components';
import { IAlisaRequest } from '../Alisa/interfaces/IAlisaPlatform';
/**
 * Тип для обработки запроса для загрузки изображения
 */
export type TImageCallback = (model: ImageTokens) => Promise<string | null>;
/**
 * Возвращает токен для изображения.
 * В случае, если найти токен в базе не удалось, отрабатывает обработчик, который отправляет запрос на получение токена.
 * @param path Путь до изображения
 * @param platform Платформа для которой нужно получить токен
 * @param controller Контроллер приложения
 * @param cb Обработчик, который вернет токен.
 */
export declare function getImageToken(path: string, platform: string, controller: BotController, cb: TImageCallback): Promise<string | null>;
/**
 * Тип для обработки запроса для загрузки аудио
 */
export type TSoundCallback = (model: SoundTokens) => Promise<string | null>;
/**
 * Возвращает токен для аудио.
 * В случае, если найти токен в базе не удалось, отрабатывает обработчик, который отправляет запрос на получение токена.
 * @param path Путь до аудиофайла
 * @param platform Платформа для которой нужно получить токен
 * @param controller Контроллер приложения
 * @param cb Обработчик, который вернет токен.
 */
export declare function getSoundToken(path: string, platform: string, controller: BotController, cb: TSoundCallback): Promise<string | null>;
/**
 * Ищет в запросе команду для паузы, и заменяет ее на корректный вид(sil).
 *
 * @param {string} text - Текст, который будет озвучен пользователю
 * @returns {string} - Строка с паузой в формате sil <[ms]>
 */
export declare function getPause(text: string): string;
/**
 * Заменяет звуковой токен в тексте на соответствующий звук
 *
 * @param {string} key - Ключ звука для замены
 * @param {string | string[]} value - Значение или массив значений для замены
 * @param {string} text - Исходный текст
 * @returns {string} - Текст с замененными звуками
 *
 * @example
 * ```ts
 * // Замена одиночного звука
 * const text = replaceSound(
 *     '#game_win#',
 *     '<speaker audio="alice-sounds-game-win-1.opus">',
 *     'Поздравляем #game_win# с победой!'
 * );
 *
 * // Замена на массив звуков
 * const text = replaceSound(
 *     '#nature_rain#',
 *     [
 *         '<speaker audio="alice-sounds-nature-rain-1.opus">',
 *         '<speaker audio="alice-sounds-nature-rain-2.opus">'
 *     ],
 *     'На улице #nature_rain# идет дождь'
 * );
 * ```
 */
export declare function replaceSound(key: string, value: string | string[], text: string): string;
/**
 * Удаляет все звуковые токены из текста
 *
 * @param {string} text - Исходный текст
 * @returns {string} - Текст без звуковых токенов
 *
 * @example
 * ```ts
 * // Удаление звуковых токенов
 * const text = removeSound('Текст #game_win# без #nature_rain# звуков');
 * // Результат: 'Текст без звуков'
 * ```
 */
export declare function removeSound(text: string): string;
/**
 * Базовый метод для обработки tts.
 * Основная задача метода - найти все ключи в запросе, и заменить их на корректные звуки/эффекты.
 * По умолчанию используется в Алисе и Марусе.
 * @param soundInfo - Информация необходимая для обработки аудио
 * @param defaultSounds - Стандартные звуки
 * @param defaultEffects - Стандартные эффекты
 */
/**
 * Базовый метод для обработки tts.
 * Основная задача метода - найти все ключи в запросе, и заменить их на корректные звуки/эффекты.
 * По умолчанию используется в Алисе и Марусе.
 * @param soundInfo - Информация необходимая для обработки аудио
 * @param defaultSounds - Стандартные звуки
 * @param defaultEffects - Стандартные эффекты
 */
export declare function defaultSoundProcessing(soundInfo: ISoundInfo, defaultSounds: ISound[], defaultEffects?: IEffect[]): string;
/**
 * Базовая функция, которая инициализирует команду пользователя.
 * Обрабатывает различные типы запросов и сохраняет команду в контроллере
 * @param request Объект запроса от пользователя
 * @param controller Контроллер приложения
 */
export declare function initUserCommand(request: IAlisaRequest, controller: BotController): void;
/**
 * Возвращает корректный массив кнопок с учетом лимита
 * @param buttons
 * @param limit
 */
export declare function getCorrectButtons<TButton = IButtonType>(buttons: TButton[], limit?: number): TButton[];
/**
 * Утилита для безопасного преобразования строки в объект
 * @param data
 */
export declare function tryParse<TResult = Record<string, unknown>>(data: Record<string, unknown> | object | string | null | undefined): TResult | null;
