import { Locator, Page } from "@playwright/test";
import type { FormFieldsData, FormFieldsLocators } from '../../../common/FormFields.types';
type SelectOption = {
    selectValue: string;
    valueForSearch?: string;
};
/**
 * Низкоуровневое заполнение полей формы
 */
export declare class FormFieldFillers {
    private readonly page;
    /**
     * @param page — страница Playwright
     */
    constructor(page: Page);
    /**
     * Заполняет текстовое поле по его ключу
     *
     * @param fieldKey - Ключ поля из FormFieldsLocators.textFieldsLocators
     * @param value - Текст для заполнения
     * @param locators - Реестр локаторов всех полей формы
     * @param context - Контекст для логирования (название формы, экрана и т.д.)
     *
     * @example
     * ```typescript
     * await formHelper.fillTextField('email', 'user@example.com', locators, 'форма регистрации');
     * ```
     *
     * @throws {Error} Если поле не найдено или не удалось заполнить
     */
    fillTextField(fieldKey: string, value: string, locators: FormFieldsLocators, context?: string): Promise<void>;
    /**
     * Выбирает значение в выпадающем списке (combobox) по ключу поля
     *
     * @param fieldKey - Ключ поля из FormFieldsLocators.comboboxFieldsLocators
     * @param value - Значение для выбора. Может быть строкой или объектом с valueForSearch
     * @param locators - Реестр локаторов всех полей формы
     * @param context - Контекст для логирования (название формы, экрана и т.д.)
     *
     * @example
     * ```typescript
     * // Простой выбор
     * await formHelper.selectComboboxValue('city', 'Москва', locators);
     *
     * // Выбор с поиском
     * await formHelper.selectComboboxValue('city', {
     *   selectValue: 'Москва',
     *   valueForSearch: 'Мос'
     * }, locators);
     *
     * // Точное совпадение (с префиксом "=")
     * await formHelper.selectComboboxValue('city', '=Москва (город)', locators);
     * ```
     *
     * @throws {Error} Если поле не найдено, недоступно или значение не найдено в списке
     */
    selectComboboxValue(fieldKey: string, value: SelectOption, locators: FormFieldsLocators, context?: string): Promise<void>;
    /**
     * Выбирает одно или несколько значений в мульти-выпадающем списке (multi-combobox)
     *
     * @param fieldKey - Ключ поля из FormFieldsLocators.multiComboboxFieldsLocators
     * @param options - Массив опций для выбора. Каждая опция может содержать valueForSearch
     * @param locators - Реестр локаторов всех полей формы
     * @param context - Контекст для логирования (название формы, экрана и т.д.)
     *
     * @example
     * ```typescript
     * // Выбор одного значения
     * await formHelper.selectMultiComboboxValues('tags', [
     *   { selectValue: 'Важный' }
     * ], locators);
     *
     * // Выбор нескольких значений
     * await formHelper.selectMultiComboboxValues('tags', [
     *   { selectValue: 'Важный' },
     *   { selectValue: 'Срочный' },
     *   { selectValue: 'Архив', valueForSearch: 'арх' }
     * ], locators);
     * ```
     *
     * @throws {Error} Если поле не найдено, недоступно или какая-либо опция не найдена
     */
    selectMultiComboboxValues(fieldKey: string, options: SelectOption[], locators: FormFieldsLocators, context?: string): Promise<void>;
    /**
     * Заполняет поле с подсказками DaData
     *
     * Ввод через `pressSequentially` для срабатывания debounce DaData API.
     * Выбор подсказки — клик по `.autocomplele-item` в панели подсказок
     * (CDK overlay для `core-dadata-search` либо inline `.autocomplete-items` у поля).
     *
     * @param fieldKey - Ключ поля из FormFieldsLocators.daDataFieldsLocators
     * @param inputValue - Значение для ввода в поле (триггер для поиска подсказок)
     * @param selectValue - Текст подсказки для выбора; префикс `=` — exact-совпадение
     * @param expectedValue - Ожидаемое значение в input после выбора (по умолчанию = selectValue без `=`)
     * @param locators - Реестр локаторов всех полей формы
     * @param context - Контекст для логирования (название формы, экрана и т.д.)
     *
     * @example
     * ```typescript
     * // Заполнение адреса
     * await formHelper.fillDaDataField(
     *   'Adress',
     *   'г Москва, ул Тверская',
     *   '=г Москва, ул Тверская, д 15',
     *   undefined,
     *   locators
     * );
     *
     * // Организация: inputValue — поиск, selectValue — полный текст подсказки
     * await formHelper.fillDaDataField(
     *   'InnOrNameCompany',
     *   'ООО "НАЙЗА"',
     *   'ООО "НАЙЗА" ИНН: 5050151540',
     *   'ООО "НАЙЗА"',
     *   locators
     * );
     * ```
     *
     * @throws {Error} Если поле не найдено, недоступно или не удалось выбрать подсказку
     */
    fillDaDataField(fieldKey: string, inputValue: string, selectValue: string, expectedValue: string | undefined, locators: FormFieldsLocators, context?: string): Promise<void>;
    /**
     * Устанавливает переключатель (toggle/switch) в заданное состояние
     *
     * @param fieldKey - Ключ поля из FormFieldsLocators.toggleButtonsLocators
     * @param desiredState - Желаемое состояние: true/false или 'Yes'/'No'
     * @param locators - Реестр локаторов всех полей формы
     * @param context - Контекст для логирования (название формы, экрана и т.д.)
     *
     * @example
     * ```typescript
     * // Включить toggle
     * await formHelper.setToggle('notifications', true, locators);
     *
     * // Выключить toggle
     * await formHelper.setToggle('darkMode', false, locators);
     *
     * // С использованием строковых значений
     * await formHelper.setToggle('newsletter', 'Yes', locators);
     * ```
     *
     * @throws {Error} Если поле не найдено или не удалось изменить состояние
     */
    setToggle(fieldKey: string, desiredState: boolean | 'Yes' | 'No', locators: FormFieldsLocators, context?: string): Promise<void>;
    /**
     * Устанавливает чекбокс в заданное состояние
     *
     * @param checkboxKey - Ключ чекбокса из FormFieldsLocators.checkboxesLocators
     * @param checked - Желаемое состояние: true (отмечен) или false (не отмечен)
     * @param checkboxes - Объект с локаторами всех чекбоксов формы
     *
     * @example
     * ```typescript
     * // Отметить чекбокс
     * await formHelper.setCheckbox('agreement', true, locators.checkboxesLocators);
     *
     * // Снять отметку
     * await formHelper.setCheckbox('newsletter', false, locators.checkboxesLocators);
     * ```
     *
     * @throws {Error} Если чекбокс не найден
     */
    setCheckbox(checkboxKey: string, checked: boolean, checkboxes: Record<string, Locator>): Promise<void>;
    /**
     * Выбирает радиокнопку по её ключу
     *
     * @param radioKey - Ключ радиокнопки из FormFieldsLocators.radioButtonsLocators
     * @param radioButtons - Объект с локаторами всех радиокнопок формы
     *
     * @example
     * ```typescript
     * // Выбрать радиокнопку "Мужской"
     * await formHelper.selectRadioButton('male', locators.radioButtonsLocators);
     *
     * // Выбрать радиокнопку "Доставка курьером"
     * await formHelper.selectRadioButton('courier', locators.radioButtonsLocators);
     * ```
     *
     * @throws {Error} Если радиокнопка не найдена или не удалось выбрать
     */
    selectRadioButton(radioKey: string, radioButtons: Record<string, Locator>): Promise<void>;
    /**
     * Загружает файл в поле загрузки файлов
     *
     * @param fieldKey - Ключ поля из FormFieldsLocators.fileFieldsLocators
     * @param filePath - Путь к файлу (абсолютный или относительный от resources/files)
     * @param locators - Реестр локаторов всех полей формы
     * @param context - Контекст для логирования (название формы, экрана и т.д.)
     *
     * @example
     * ```typescript
     * // Загрузка файла из стандартной директории
     * await formHelper.uploadFileByFieldKey('passport', 'passport.pdf', locators);
     *
     * // Загрузка файла по абсолютному пути
     * await formHelper.uploadFileByFieldKey('photo', '/Users/user/photo.jpg', locators);
     *
     * // Загрузка файла из поддиректории
     * await formHelper.uploadFileByFieldKey('document', 'docs/contract.pdf', locators);
     * ```
     *
     * @throws {Error} Если поле не найдено или загрузка не удалась (статус ответа не 200)
     */
    uploadFileByFieldKey(fieldKey: string, filePath: string, locators: FormFieldsLocators, context?: string): Promise<void>;
    /**
     * Универсальный метод для массового заполнения всех типов полей формы
     *
     * @param data - Объект с данными для заполнения всех полей формы
     * @param locators - Реестр локаторов всех полей формы
     * @param context - Контекст для логирования (название формы, экрана и т.д.)
     *
     * @example
     * ```typescript
     * const formData = {
     *   textFieldsData: {
     *     email: 'user@example.com',
     *     name: 'Иван Петров'
     *   },
     *   comboboxFieldsData: {
     *     city: { selectValue: 'Москва' },
     *     country: { selectValue: 'Россия', valueForSearch: 'Рос' }
     *   },
     *   checkboxesData: {
     *     agreement: true,
     *     newsletter: false
     *   },
     *   fileFieldsData: {
     *     passport: ['passport.pdf'],
     *     photo: ['avatar.jpg']
     *   }
     * };
     *
     * await formHelper.fillFormFields(formData, locators, 'форма регистрации');
     * ```
     *
     * @remarks
     * Метод автоматически определяет какие поля нужно заполнить по наличию данных
     * Порядок заполнения: radiobutton → toggle → combobox → multi-combobox → text → DaData → checkbox → file
     *
     * @throws {Error} При ошибке заполнения любого из полей
     */
    fillFormFields(data: FormFieldsData, locators: FormFieldsLocators, context?: string): Promise<void>;
    /**
     * Внутренний метод заполнения текстового поля
     * @private
     */
    private fillTextFieldInternal;
    /**
     * Внутренний метод выбора опции в combobox
     * @private
     */
    private selectOptionInCombobox;
    /**
     * Внутренний метод выбора опций в multi-combobox
     * @private
     */
    private selectOptionsInMultiCombobox;
    /**
     * Внутренний метод заполнения DaData поля
     * @private
     */
    private fillDaDataFieldInternal;
    /**
     * Возвращает панель подсказок DaData для активного поля.
     * - `core-dadata-search` → CDK overlay (`.core-dadata-suggestions-overlay .autocomplete-items`);
     * - иначе → `.autocomplete-items` внутри ближайшего предка `div.autocomplete` у input
     * Резолв всегда от поля, без привязки к имени конкретного Angular-компонента.
     * @param field — локатор input DaData-поля
     * @returns локатор панели `.autocomplete-items`
     * @throws {Error} Если не удалось определить контейнер подсказок относительно поля
     * @private
     */
    private resolveAutocompleteSuggestionsPanel;
    /**
     * Выбирает подсказку в DaData autocomplete (`.autocomplele-item`).
     * @param field — локатор input DaData-поля
     * @param selectValue — текст подсказки (substring в `.autocomplele-item`); префикс `=` влияет только на проверку значения поля
     * @private
     */
    private selectAutocompleteSuggestion;
    /**
     * Внутренний метод установки toggle
     * @private
     */
    private setToggleButtonInternal;
    /**
     * Внутренний метод загрузки файла
     * @private
     */
    private uploadFileInternal;
    /**
     * Заполнение группы радиокнопок
     * @private
     */
    private fillRadioButtonsGroup;
    /**
     * Заполнение группы toggle кнопок
     * @private
     */
    private fillTogglesGroup;
    /**
     * Заполнение группы combobox полей
     * @private
     */
    private fillComboboxesGroup;
    /**
     * Заполнение группы multi-combobox полей
     * @private
     */
    private fillMultiComboboxesGroup;
    /**
     * Заполнение группы текстовых полей
     * @private
     */
    private fillTextFieldsGroup;
    /**
     * Заполнение группы DaData полей
     * @private
     */
    private fillDaDataFieldsGroup;
    /**
     * Заполнение группы чекбоксов
     * @private
     */
    private fillCheckboxesGroup;
    /**
     * Заполнение группы полей загрузки файлов (последовательно, по одному файлу на клик).
     * @private
     */
    private fillFilesGroup;
    /**
     * Универсальный метод выбора опций в выпадающих списках
     * @private
     */
    private selectDropdownOption;
    /**
     * Заполнение поля поиска в выпадающем списке
     * @private
     */
    private fillSearchInput;
    /**
     * Ожидание появления опции и клик по ней
     * @private
     */
    private waitForAndSelectOption;
    /**
     * Разрешение полного пути к файлу
     * @private
     */
    private resolveFilePath;
}
export {};
