import { Page, Locator } from '@playwright/test';
import { BasePage } from '../BasePage/BasePage';
import type { GridRowActionsConfiguration } from '../BasePage/helpers/RowActionsHelper/RowActionsHelper.types';
import type { FormFieldsLocators, FormFieldsData } from '../BasePage/helpers/FormHelper/FormHelper.types';
import { Role } from '../../utils/test-role-utils';
import { GridRowService, GridModalService, GridRowActionsService, GridFormService } from './services';
import { GridPageConfiguration } from './BaseGridPage.types';
import { ModalWindowConfiguration } from '../common/Modal.types';
/** Общий testId кнопки меню действий строки грида (используется по умолчанию для страниц с type: 'menu'). */
export declare const DEFAULT_GRID_ROW_MENU_ACTION_TEST_IDS: Record<string, string>;
export declare abstract class BaseGridPage extends BasePage {
    abstract GridButtons: Record<string, Locator>;
    abstract GridFilters: Record<string, Locator>;
    /**
     * Возвращает Record testId → ключ для кнопок действий строки.
     * Переопределите в наследнике и верните объект из локаторов, чтобы использовать стандартную реализацию getGridRowActionButtons.
     * По умолчанию возвращает кнопку меню (RowMenuButton: 'actionMenu') для страниц с действиями через меню.
     */
    protected getGridRowActionTestIds(): Record<string, string> | null;
    /**
     * Получает Record локаторов кнопок действий строки для конкретной строки.
     * Стандартная реализация строит локаторы по getGridRowActionTestIds(). Можно переопределить в наследниках при другой разметке.
     * @param rowLocator - локатор строки, для которой нужно получить кнопки
     * @returns Record с локаторами кнопок действий строки или null
     */
    getGridRowActionButtons(rowLocator: Locator): Record<string, Locator> | null;
    /**
     * Локаторы для пунктов меню действий строки
     * Пункты меню находятся в открывшемся меню на странице
     * Пример: { 'MenuItemEdit': page.getByRole('menuitem', { name: 'Редактировать' }), 'MenuItemDelete': page.getByRole('menuitem', { name: 'Удалить' }) }
     */
    GridRowActionMenuItems?: Record<string, Locator>;
    /**
     * Сервис для работы со строками таблицы.
     */
    protected gridRowService: GridRowService;
    /**
     * Сервис для работы с модальными окнами грида.
     */
    protected gridModalService: GridModalService;
    /**
     * Сервис для работы с действиями над строками грида.
     */
    protected gridRowActionsService: GridRowActionsService;
    /**
     * Сервис для работы с формами грида.
     */
    protected gridFormService: GridFormService;
    constructor(page: Page);
    /**
     * Создает сервис для работы с формами грида.
     * @returns GridFormService
     */
    private createGridFormService;
    /**
     * Создает сервис для работы с действиями над строками грида.
     * @returns GridRowActionsService
     */
    private createGridRowActionsService;
    /**
     * Абстрактный метод для получения конфигурации элементов страницы с гридом в зависимости от роли
     * Должен быть реализован в наследниках с учетом специфики каждой страницы с гридом
     */
    abstract getGridPageConfiguration(role: Role): GridPageConfiguration;
    /**
    * Метод для получения конфигурации модальных окон в зависимости от роли
    * Должен быть переопределен в наследниках, если страница имеет модальные окна
    * По умолчанию возвращает пустой массив
    * @param role - роль пользователя
    * @returns Массив конфигураций модальных окон (может быть пустым, если модальных окон нет)
    */
    getModalWindowConfigurations(_role: Role): ModalWindowConfiguration[];
    /**
     * Метод для получения конфигурации действий строки в зависимости от роли
     * Должен быть переопределен в наследниках, если страница имеет действия строки
     * По умолчанию возвращает null
     * @param role - роль пользователя
     * @returns Конфигурация действий строки или null, если действия не настроены
     */
    getGridRowActionsConfiguration(_role: Role): GridRowActionsConfiguration | null;
    /**
    * Метод для получения Record кнопок модального окна
    * Должен быть переопределен в наследниках, если страница имеет модальные окна
    * По умолчанию возвращает null
    * @param modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowButtons(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record полей ввода модального окна
    * Должен быть переопределен в наследниках, если страница имеет модальные окна
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowTextFields(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record radiobutton модального окна (для вариативного содержания)
    * Должен быть переопределен в наследниках, если модальное окно имеет вариативное содержание
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowRadioButtons(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record чекбоксов модального окна (для вариативного содержания)
    * Должен быть переопределен в наследниках, если модальное окно имеет чекбоксы
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowCheckboxes(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record слайдеров модального окна (для вариативного содержания)
    * Должен быть переопределен в наследниках, если модальное окно имеет слайдеры
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowSliders(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record кнопок Toggle модального окна
    * Должен быть переопределен в наследниках, если модальное окно имеет кнопки Toggle
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowToggleButtons(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record combobox полей модального окна
    * Должен быть переопределен в наследниках, если модальное окно имеет поля combobox
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowComboboxFields(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record полей DaData модального окна
    * Должен быть переопределен в наследниках, если модальное окно имеет поля DaData
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowDaDataFields(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record полей multiCombobox модального окна
    * Должен быть переопределен в наследниках, если модальное окно имеет поля multiCombobox
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowMultiComboboxFields(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
    * Метод для получения Record полей для загрузки файлов модального окна
    * Должен быть переопределен в наследниках, если модальное окно имеет поля для загрузки файлов
    * По умолчанию возвращает null
    * @param _modalWindowKey - ключ модального окна (опционально для случаев, если на странице несколько модальных окон)
    */
    getModalWindowFileFields(_modalWindowKey?: string): Record<string, Locator> | null;
    /**
     * Собирает все локаторы полей формы модального окна
     * @param modalWindowKey - ключ модального окна (опционально)
     * @returns объект локаторов для formHelper.fillFormFields
     */
    getModalWindowFormLocators(modalWindowKey?: string): FormFieldsLocators;
    /**
    * Валидирует входной параметр role
    * @param role - роль пользователя
    * @throws Error если параметр невалиден
    */
    private validateRole;
    /**
     * Проверяет видимость кнопок грида
     */
    checkGridButtons(): Promise<void>;
    /**
     * Проверяет видимость полей фильтрации грида.
     */
    checkGridFilters(): Promise<void>;
    /**
     * Проверяет наличие необходимых колонок в таблице по их названиям.
     * @param columnNames - массив названий колонок для проверки (например, ['Фамилия', 'Имя', 'Email'])
     */
    verifyRequiredColumns(columnNames: string[]): Promise<void>;
    /**
     * Поиск строки по rowKey
     * @param rowKey - ключевое поле строки (уникальный идентификатор строки в таблице)
     * @param rowData - объект с данными строки, где ключ - название колонки, значение - ожидаемое значение ячейки
     * @param isNewlyAdded - если true, проверяет только что добавленную строку
     * @returns Locator строки или null, если строка не найдена
     */
    findTableRow(rowKey: string, rowData: Record<string, string>, isNewlyAdded?: boolean): Promise<Locator | null>;
    /**
     * Кликает по ссылке в строке таблицы
     * @param rowKey - ключевое поле строки
     * @param rowData - объект с данными строки
     * @param isNewlyAdded - если true, проверяет только что добавленную строку
     * @param textByClick - текст ссылки для клика
     * @throws Error если строка не найдена или ссылка не найдена
     */
    clickInTableRow(rowKey: string, rowData: Record<string, string>, isNewlyAdded: boolean, textByClick: string): Promise<void>;
    /**
     * Ищет строку в таблице без выброса ошибки (для проверки отсутствия строки)
     * @param rowKey - ключевое поле строки
     * @param rowData - объект с данными строки
     * @returns Locator строки или null, если строка не найдена
     */
    findTableRowSilent(rowKey: string, rowData: Record<string, string>): Promise<Locator | null>;
    /**
     * Проверяет строку в таблице
     * @param rowKey - ключевое поле строки (уникальный идентификатор строки в таблице)
     * @param rowData - объект с данными строки, где ключ - название колонки, значение - ожидаемое значение ячейки
     * @param isNewlyAdded - если true, проверяет только что добавленную строку
     * @param onRowFound - Колбэк, который вызывается после нахождения строки (вызывается даже при ошибках проверки). Применим для очистки мусора в случае падения теста
     */
    verifyTableRow(rowKey: string, rowData: Record<string, string>, isNewlyAdded: boolean, onRowFound?: (row: Locator) => void): Promise<void>;
    /**
    * Заполняет форму, добавляет строку и проверяет, что строка появилась в гриде
    *
    * @param triggerButtonKey - ключ кнопки добавления строки
    * @param rowKey - ключевое поле строки (уникальный идентификатор строки в гриде)
    * @param expectedRowData - ожидаемые данные строки (ключ — название колонки)
    * @param isFirstRow - является ли строка первой в таблице.
    * @param saveButtonKey - ключ кнопки сохранения
    * @param modalWindowKey - ключ модального окна
    * @param formFields - Объект с полями формы
    * @param onRowVerified - Колбэк, который вызывается после нахождения строки (вызывается даже при ошибках проверки). Применим для очистки мусора в случае падения теста
    */
    fillFormAndAddRow(triggerButtonKey: string, rowKey: string, expectedRowData: Record<string, string>, isFirstRow: boolean | undefined, saveButtonKey: string | undefined, modalWindowKey: string | undefined, formFields: FormFieldsData, onRowVerified?: (row: Locator) => void): Promise<void>;
    /**
     * Проверяет все элементы грида (кнопки и поля)
     */
    checkAllGridElements(): Promise<void>;
    /**
     * Открывает модальное окно по кнопке-триггеру
     * @param triggerButton - локатор кнопки, открывающей модальное окно
     * @returns true если модальное окно успешно открыто, false в случае ошибки
     */
    openModalWindow(triggerButton: Locator): Promise<void>;
    /**
     * Проверяет видимость кнопок в модальном окне
     * @param buttons - Record кнопок модального окна
     * @param config - конфигурация модального окна
     */
    checkModalWindowButtons(_buttons: Record<string, Locator>, config: ModalWindowConfiguration): Promise<void>;
    /**
     * Проверяет видимость и редактируемость полей в модальном окне
     * @param fields - Record полей модального окна
     * @param config - конфигурация модального окна
     */
    checkModalWindowFields(_fields: Record<string, Locator>, config: ModalWindowConfiguration): Promise<void>;
    /**
     * Проверяет одно модальное окно (открытие, проверка элементов, закрытие)
     * @param config - конфигурация модального окна
     * @param modalWindowKey - ключ модального окна (опционально)
     * @returns true если проверка прошла успешно, false в случае ошибки
     */
    checkSingleModalWindow(config: ModalWindowConfiguration, modalWindowKey?: string): Promise<boolean>;
    /**
     * Находит конфигурацию модального окна по ключу или triggerButtonKey.
     * @param role - роль пользователя
     * @param modalWindowKey - опциональный ключ модального окна (custom key, затем индекс modalWindowN, затем как triggerButtonKey)
     * @param triggerButtonKey - при отсутствии modalWindowKey используется для поиска по triggerButtonKey; иначе возвращается первый конфиг
     * @returns найденная конфигурация или undefined
     */
    protected findModalWindowConfig(modalWindowKey?: string, triggerButtonKey?: string): ModalWindowConfiguration | undefined;
    /**
     * Проверяет, доступно ли действие для текущей роли.
     * @param actionKey - ключ действия
     * @returns true если действие доступно
     */
    isRowActionAvailable(actionKey: string): boolean;
    /**
     * Открывает меню действий над строкой.
     * @param rowLocator - локатор строки
     */
    openRowActionsMenu(rowLocator: Locator): Promise<void>;
    /**
     * Закрывает меню действий над строкой
     */
    closeRowActionsMenu(): Promise<void>;
    /**
     * Универсальный метод для выполнения действия со строкой.
     * @param rowLocator - локатор строки
     * @param actionKey - ключ действия (например, 'MenuItemEdit' или 'RowEditButton')
     */
    clickRowAction(rowLocator: Locator, actionKey: string): Promise<void>;
    /**
     * Проверяет видимость кнопок действий строки.
     * @param rowLocator - локатор строки
     */
    checkGridRowActions(rowLocator: Locator): Promise<void>;
    /**
     * Открывает строку на редактирование.
     * @param rowLocator - локатор строки
     * @param modalWindowKey - ключ модального окна (опционально)
     * @returns true если модальное окно успешно открыто
     */
    editRow(rowLocator: Locator, modalWindowKey?: string): Promise<boolean>;
    /**
     * Открывает строку на просмотр (readonly).
     * @param rowLocator - локатор строки
     * @param modalWindowKey - ключ модального окна (опционально)
     * @returns true если модальное окно успешно открыто
     */
    viewRow(rowLocator: Locator, modalWindowKey?: string): Promise<boolean>;
    /**
     * Удаляет строку (с подтверждением, если требуется).
     * @param rowLocator - локатор строки
     * @param confirmDelete - нужно ли подтверждение удаления (по умолчанию true)
     * @returns true если удаление успешно
     */
    deleteRow(rowLocator: Locator, confirmDelete?: boolean): Promise<boolean>;
    /**
     * Редактирует строку с заполнением формы, сохранением и проверкой результата.
     * @param rowLocator - локатор строки
     * @param expectedRowData - ожидаемые данные после сохранения (для проверки) (обязательный)
     * @param saveButtonKey - ключ кнопки сохранения (по умолчанию 'ButtonSave')
     * @param formFields - Объект с полями для заполнения
     * @param modalWindowKey - ключ модального окна (опционально)
     * @param onRowVerified - Колбэк, который вызывается после нахождения строки (вызывается даже при ошибках проверки). Применим для очистки мусора в случае падения теста
     */
    editRowAndVerify(rowLocator: Locator, expectedRowData: Record<string, string>, saveButtonKey: string | undefined, formFields: FormFieldsData, modalWindowKey?: string, onRowVerified?: (row: Locator) => void): Promise<void>;
    /**
     * Просматривает строку и проверяет данные.
     * @param rowLocator - локатор строки
     * @param expectedData - ожидаемые данные для проверки
     * @param modalWindowKey - ключ модального окна
     */
    viewRowAndVerify(rowLocator: Locator, expectedData: Record<string, string>, modalWindowKey?: string): Promise<void>;
    /**
     * Удаляет строку и проверяет, что она исчезла.
     * @param rowKey - ключевое поле строки
     * @param rowData - данные строки для поиска
     * @param confirmDelete - нужно ли подтверждение
     */
    deleteRowAndVerify(rowKey: string, rowData: Record<string, string>, confirmDelete?: boolean): Promise<void>;
    /**
     * Реализация метода активации/деактивации для гридов.
     */
    protected toggleActivationForGrid(rowLocator: Locator, action: 'activate' | 'deactivate', actionType?: 'menu' | 'button', requireConfirmation?: boolean): Promise<void>;
    /**
    * Активирует или деактивирует строку в гриде.
    * @param rowLocator - локатор строки
    * @param action - действие: 'activate' или 'deactivate'
    * @param actionType - тип действия: 'menu' или 'button' (опционально)
    * @param requireConfirmation - требуется ли подтверждение (опционально)
    */
    toggleActivation(rowLocator: Locator, action: 'activate' | 'deactivate', actionType?: 'menu' | 'button', requireConfirmation?: boolean): Promise<void>;
    deleteGridTrashAfterFail(rowLocator: Locator, confirmDelete: boolean): Promise<void>;
}
