import { Locator, Page } from "@playwright/test";
import { FormHelper } from "../FormHelper/FormHelper";
import type { FormFieldsData, FormFieldsLocators } from "../FormHelper/FormHelper.types";
import type { GridRowActionsConfiguration } from "./RowActionsHelper.types";
export type { RowActionsMenu, RowActionsButtons, RowActions, GridRowActionsConfiguration } from "./RowActionsHelper.types";
export type ConfirmActionFn = () => Promise<void>;
/** Колбэк терминального действия в модальном окне: клик по кнопке → ожидание скрытия → проверка ошибок */
export type PerformModalTerminalActionToCloseModalWindowFn = (button: Locator, modalWindowBody: Locator, stepName: string) => Promise<void>;
export declare class RowActionsHelper {
    private page;
    private formHelper;
    private checkNoHaveErrorMessageFn;
    private confirmActionFn;
    private modalWindowBody;
    constructor(page: Page, formHelper: FormHelper, tryFindErrorMessageFn: () => Promise<string[] | void>, confirmActionFn: ConfirmActionFn, modalWindowBody: Locator);
    /**
     * Получает локатор действия - использует готовый локатор
     * @param actionLocator - готовый локатор действия
     * @returns локатор действия
     */
    private getRowActionLocator;
    /**
    * Открывает меню действий над строкой
    * @param menuButtonLocator - готовый локатор кнопки меню
    */
    openRowActionsMenuBase(menuButtonLocator: Locator): Promise<void>;
    /**
     * Закрывает меню действий над строкой
     */
    closeRowActionsMenuBase(): Promise<void>;
    /**
    * Выполняет действие со строкой
    * @param actionKey - ключ действия (например, 'MenuItemEdit' или 'ButtonEdit')
    * @param rowActionsConfig - конфигурация действий строки
    * @param rowActionButtons - Record с локаторами кнопок действий (готовые локаторы)
    * @param rowActionMenuItems - Record с локаторами пунктов меню (всегда на странице)
    */
    clickRowActionBase(actionKey: string, rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null): Promise<void>;
    /**
    * Проверяет видимость кнопок действий строки
    * @param rowActionsConfig - конфигурация действий строки
    * @param rowActionButtons - Record с локаторами кнопок действий (готовые локаторы)
    * @param rowActionMenuItems - Record с локаторами пунктов меню (всегда на странице)
    */
    checkRowActionsBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null): Promise<void>;
    /**
    * Открывает строку на редактирование (базовый метод)
    * @param rowActionsConfig - конфигурация действий строки
    * @param rowActionButtons - Record с локаторами кнопок действий (готовые локаторы)
    * @param rowActionMenuItems - Record с локаторами пунктов меню (всегда на странице)
    * @param modalWindowBody - локатор тела модального окна для проверки открытия (опционально)
    * @returns true если модальное окно успешно открыто
    */
    editRowBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null, modalWindowBody?: Locator): Promise<boolean>;
    /**
    * Открывает строку на просмотр (readonly) (базовый метод)
    * @param rowActionsConfig - конфигурация действий строки
    * @param rowActionButtons - Record с локаторами кнопок действий (готовые локаторы)
    * @param rowActionMenuItems - Record с локаторами пунктов меню (всегда на странице)
    * @param modalWindowBody - локатор тела модального окна для проверки открытия (опционально)
    * @returns true если модальное окно успешно открыто
    */
    viewRowBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null, modalWindowBody?: Locator): Promise<boolean>;
    /**
    * Удаляет строку (с подтверждением, если требуется) (базовый метод)
    * @param rowActionsConfig - конфигурация действий строки
    * @param rowActionButtons - Record с локаторами кнопок действий (готовые локаторы)
    * @param rowActionMenuItems - Record с локаторами пунктов меню (всегда на странице)
    * @param confirmDelete - нужно ли подтверждение удаления (по умолчанию true)
    * @returns true если удаление успешно
    */
    deleteRowBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null, confirmDelete?: boolean): Promise<boolean>;
    /**
    * Редактирует строку с заполнением формы, сохранением и проверкой результата
    * Универсальный базовый метод для BaseGridPage и BaseCard
    * @param editRowFn - функция для открытия редактирования (возвращает true если модальное окно открыто)
    * @param formFields - Объект с полями для заполнения
    * @param getModalFormLocatorsFn - функция для получения всех локаторов полей формы модального окна
    * @param getModalButtonsFn - функция для получения кнопок модального окна
    * @param saveButtonKey - ключ кнопки сохранения (по умолчанию 'ButtonSave')
    * @param verifyRowFn - опциональная функция для проверки результата после сохранения
    * @param performModalTerminalActionToCloseModalWindowFn - колбэк для выполнения терминального действия (сохранение): клик → ожидание скрытия модалки → проверка ошибок
    */
    editRowAndVerifyBase(editRowFn: () => Promise<boolean>, formFields: FormFieldsData, getModalFormLocatorsFn: (modalWindowKey?: string) => FormFieldsLocators | null, getModalButtonsFn: (modalWindowKey?: string) => Record<string, Locator> | null, saveButtonKey: string | undefined, performModalTerminalActionToCloseModalWindowFn: PerformModalTerminalActionToCloseModalWindowFn, verifyRowFn?: () => Promise<void>): Promise<void>;
    /**
    * Просматривает строку и проверяет данные в модальном окне
    * Универсальный базовый метод для BaseGridPage и BaseCard
    * @param viewRowFn - функция для открытия просмотра (возвращает true если модальное окно открыто)
    * @param expectedData - ожидаемые данные для проверки
    * @param getModalInputsFn - функция для получения полей модального окна
    * @param getModalButtonsFn - функция для получения кнопок модального окна
    * @param performModalTerminalActionToCloseModalWindowFn - колбэк для закрытия модального окна: клик → ожидание скрытия → проверка ошибок
    */
    viewRowAndVerifyBase(viewRowFn: () => Promise<boolean>, expectedData: Record<string, string>, getModalInputsFn: (modalWindowKey?: string) => Record<string, Locator> | null, getModalButtonsFn: (modalWindowKey?: string) => Record<string, Locator> | null, performModalTerminalActionToCloseModalWindowFn: PerformModalTerminalActionToCloseModalWindowFn): Promise<void>;
    /**
    * Удаляет строку и проверяет, что она исчезла
    * Универсальный базовый метод для BaseGridPage и BaseCard
    * @param findRowFn - функция для поиска строки (возвращает Locator строки или null)
    * @param deleteRowFn - функция для удаления строки
    * @param findRowSilentFn - функция для поиска строки без ошибок (возвращает Locator строки или null)
    * @param rowData - данные строки для проверки отсутствия
    */
    deleteRowAndVerifyBase(findRowFn: () => Promise<Locator | null>, deleteRowFn: (row: Locator) => Promise<void>, findRowSilentFn: () => Promise<Locator | null>, rowData: Record<string, string>): Promise<void>;
    /**
    * Универсальный метод для активации/деактивации через меню или прямую кнопку.
    * Для гридов (BaseGridPage) - через меню или кнопку. Роль берётся из setRole в странице.
    */
    toggleActivation(rowLocator: Locator, action: 'activate' | 'deactivate', actionType?: 'menu' | 'button', requireConfirmation?: boolean): Promise<void>;
    /**
     * Для карточек (BaseCard) - через меню или кнопку. Роль берётся из setRole в карточке.
     */
    toggleActivation(blockKey: string, rowLocator: Locator, action: 'activate' | 'deactivate', actionType?: 'menu' | 'button', requireConfirmation?: boolean): Promise<void>;
    /**
     * Вспомогательный метод для активации/деактивации в гриде.
     * Должен быть переопределен в BaseGridPage
     */
    protected toggleActivationForGrid(_rowLocator: Locator, _action: 'activate' | 'deactivate', _actionType?: 'menu' | 'button', _requireConfirmation?: boolean): Promise<void>;
    /**
     * Вспомогательный метод для активации/деактивации в карточке.
     * Должен быть переопределен в BaseCard
     */
    protected toggleActivationForCard(_blockKey: string, _rowLocator: Locator, _action: 'activate' | 'deactivate', _actionType?: 'menu' | 'button', _requireConfirmation?: boolean): Promise<void>;
}
