/**
 * Модуль для работы с текстом
 *
 * Предоставляет набор утилит для:
 * - Обработки и форматирования текста
 * - Поиска совпадений в тексте
 * - Проверки схожести текстов
 * - Работы с окончаниями слов
 */
import { TPatternRegExp as PatternItem } from './RegExp';
/**
 * Тип для поиска совпадений в тексте.
 * Может быть строкой или массивом строк.
 *
 * @example
 * ```ts
 * const pattern: TPattern = 'привет';
 * const patterns: TPattern = ['привет', 'здравствуйте'];
 * ```
 */
export type TPattern = string | readonly string[];
/**
 * Тип для поиска совпадений в тексте с учетом регулярных выражений.
 * Может быть строкой или массивом строк.
 *
 * @example
 * ```ts
 * const pattern: TPattern = /привет/;
 * const patterns: TPattern = ['привет', /здравствуйте/];
 * ```
 */
export type TPatternReg = PatternItem | readonly PatternItem[];
/**
 * Интерфейс результата проверки схожести текстов
 *
 * @example
 * ```ts
 * const result: ITextSimilarity = {
 *   status: true,
 *   index: 0,
 *   percent: 100,
 *   text: 'привет'
 * };
 * ```
 */
export interface ITextSimilarity {
    /**
     * Статус успешности сравнения текстов
     * true - если процент схожести превышает пороговое значение
     */
    status: boolean;
    /**
     * Индекс совпавшего текста в массиве или null для строки.
     * Используется при сравнении с массивом текстов
     */
    index: number | null;
    /**
     * Процент схожести текстов (от 0 до 100)
     * 100% означает полное совпадение
     */
    percent: number;
    /**
     * Совпавший текст или null, если совпадений нет.
     * Содержит оригинальный текст из массива сравнения
     */
    text?: string | null;
}
/**
 * Класс для работы с текстом и текстовыми операциями
 *
 * @remarks
 * Класс предоставляет статические методы для:
 * - Обрезки текста
 * - Проверки URL
 * - Определения согласия/отрицания
 * - Поиска совпадений
 * - Работы с окончаниями слов
 * - Проверки схожести текстов
 *
 * @example
 * ```ts
 * // Обрезка текста
 * Text.resize('Длинный текст', 5); // -> 'Длин...'
 *
 * // Проверка URL
 * Text.isUrl('http://localhost'); // -> true
 *
 * // Определение согласия
 * Text.isSayTrue('да, согласен'); // -> true
 *
 * // Поиск совпадений
 * Text.isSayText(['привет', 'здравствуйте'], 'привет мир'); // -> true
 *
 * // Работа с окончаниями
 * Text.getEnding(5, ['яблоко', 'яблока', 'яблок']); // -> 'яблок'
 *
 * // Проверка схожести
 * Text.textSimilarity('привет', 'привт', 80); // -> { status: true, percent: 90, ... }
 * ```
 */
export declare class Text {
    #private;
    /**
     * Обрезает текст до указанной длины
     *
     * @param {string | null} text - Исходный текст
     * @param {number} [size=950] - Максимальная длина результата
     * @param {boolean} [isEllipsis=true] - Добавлять ли многоточие в конце
     * @returns {string} Обрезанный текст
     *
     * @example
     * ```ts
     * Text.resize('Длинный текст', 6); // -> 'Дли...'
     * Text.resize('Длинный текст', 6, false); // -> 'Длинны'
     * ```
     */
    static resize(text: string | null, size?: number, isEllipsis?: boolean): string;
    /**
     * Проверяет, является ли строка URL-адресом
     *
     * @param {string} link - Проверяемая строка
     * @returns {boolean} true, если строка является URL-адресом
     *
     * @example
     * ```ts
     * Text.isUrl('http://localhost'); // -> true
     * Text.isUrl('не url'); // -> false
     * ```
     */
    static isUrl(link: string): boolean;
    /**
     * Определяет наличие в тексте согласия пользователя
     *
     * @param {string} text - Проверяемый текст
     * @returns {boolean} true, если найдено подтверждение
     *
     * @remarks
     * Распознает следующие паттерны:
     * - "да"
     * - "конечно"
     * - "согласен"/"согласна"
     * - "подтверждаю"/"подтверждаю"
     *
     * @example
     * ```ts
     * Text.isSayTrue('да, согласен'); // -> true
     * Text.isSayTrue('нет, не согласен'); // -> false
     * ```
     */
    static isSayTrue(text: string): boolean;
    /**
     * Определяет наличие в тексте отрицания пользователя
     *
     * @param {string} text - Проверяемый текст
     * @returns {boolean} true, если найдено отрицание
     *
     * @remarks
     * Распознает следующие паттерны:
     * - "нет"
     * - "неа"
     * - "не"
     *
     * @example
     * ```ts
     * Text.isSayFalse('нет, не хочу'); // -> true
     * Text.isSayFalse('да, хочу'); // -> false
     * ```
     */
    static isSayFalse(text: string): boolean;
    /**
     * Проверяет наличие совпадений в тексте
     *
     * @param {TPatternReg} find - Искомый текст или массив текстов
     * @param {string} text - Исходный текст для поиска
     * @param {boolean} [isPattern=false] - Использовать ли регулярные выражения
     * @param {boolean} [useDirectRegExp=false] - Использовать исходные RegExp напрямую без нормализации и кэширования. Стоит использовать только в крайних случаях.
     * @param {RegExpConstructor} [customReg=undefined] - Произвольная реализация для обработки регулярных выражений
     * @returns {boolean} true, если найдено совпадение
     *
     * @example
     * ```ts
     * // Поиск подстроки
     * Text.isSayText('привет', 'привет мир'); // -> true
     *
     * // Поиск одной из подстрок
     * Text.isSayText(['привет', 'здравствуйте'], 'привет мир'); // -> true
     *
     * // Поиск по регулярному выражению
     * Text.isSayText(['\\bпривет\\b', '\\bмир\\b'], 'привет мир', true); // -> true
     * ```
     */
    static isSayText(find: TPatternReg, text: string, isPattern?: boolean, useDirectRegExp?: boolean, customReg?: RegExpConstructor | undefined): boolean;
    /**
     * Очищает кэш регулярных выражений.
     * Стоит вызывать только в крайних случаях
     */
    static clearCache(): void;
    /**
     * Возвращает случайную строку из массива или исходную строку
     *
     * @param {TPattern} str - Строка или массив строк
     * @returns {string} Выбранная строка
     *
     * @example
     * ```ts
     * Text.getText('привет'); // -> 'привет'
     * Text.getText(['привет', 'здравствуйте']); // -> случайная строка из массива
     * ```
     */
    static getText(str?: TPattern): string;
    /**
     * Заменяет ключ в тексте на значение
     * @param {string} key - Ключ для замены
     * @param {string | string[]} value - Значение для замены
     * @param {string} text - Исходный текст
     */
    static textReplace(key: string, value: string | string[], text: string): string;
    /**
     * Возвращает правильное окончание слова в зависимости от числа
     *
     * @param {number} num - Число для определения окончания
     * @param {readonly string[]} titles - Варианты окончаний ['один', 'два-четыре', 'пять-десять']
     * @param {number | null} [index=null] - Принудительный индекс варианта окончания
     * @returns {string | null} Выбранное окончание или null, если не найдено
     *
     * @example
     * ```ts
     * const titles = ['яблоко', 'яблока', 'яблок'];
     * Text.getEnding(1, titles); // -> 'яблоко'
     * Text.getEnding(2, titles); // -> 'яблока'
     * Text.getEnding(5, titles); // -> 'яблок'
     *
     * // Принудительный выбор формы
     * Text.getEnding(5, titles, 0); // -> 'яблоко'
     * ```
     */
    static getEnding(num: number, titles: readonly string[], index?: number | null): string | null;
    /**
     * Проверяет схожесть текстов и возвращает результат сравнения
     *
     * @param {string} origText - Оригинальный текст для сравнения
     * @param {TPattern} compareText - Текст или массив текстов для сравнения
     * @param {number} [threshold=80] - Минимальный процент схожести для положительного результата
     * @returns {ITextSimilarity} Результат сравнения текстов
     *
     * @example
     * ```ts
     * // Сравнение с одним текстом
     * Text.textSimilarity('привет', 'привт', 80);
     * // -> {
     * //   status: true,
     * //   index: 0,
     * //   percent: 90,
     * //   text: 'привт'
     * // }
     *
     * // Сравнение с массивом текстов
     * Text.textSimilarity('привет', ['привт', 'здравствуйте'], 80);
     * // -> {
     * //   status: true,
     * //   index: 0,
     * //   percent: 90,
     * //   text: 'привт'
     * // }
     * ```
     */
    static textSimilarity(origText: string, compareText: TPattern, threshold?: number): ITextSimilarity;
}
