import { Page, Locator } from '@playwright/test';
import { FormHelper } from './helpers/FormHelper/FormHelper';
import { RowActionsHelper } from './helpers/RowActionsHelper/RowActionsHelper';
import type { FormFieldsData, FormFieldsLocators } from './helpers/FormHelper/FormHelper.types';
import type { GridRowActionsConfiguration } from './helpers/RowActionsHelper/RowActionsHelper.types';
import { CertificateHelper } from './helpers/CertificateHelper';
import { TextUtils } from './utils/TextUtils';
import { Role } from '../../utils/test-role-utils';
/**
* Общие локаторы для стандартных кнопок модальных окон
* Используются во всех PagePOM классах для избежания дублирования
*/
export interface CommonModalWindowButtons {
    Save: Locator;
    Add: Locator;
    Exit: Locator;
}
export interface OrgCoreTextFields {
    FullName: Locator;
    ShortName: Locator;
    UniqueCode: Locator;
    Okopf: Locator;
    Ogrn: Locator;
    Inn: Locator;
    Kpp: Locator;
    Phone: Locator;
    Email: Locator;
}
export interface UserCoreTextFields {
    LastName: Locator;
    FirstName: Locator;
    MiddleName: Locator;
    BirthDate: Locator;
    Email: Locator;
    Phone: Locator;
    AdditionalPhone: Locator;
    Telegram: Locator;
    Inn: Locator;
    Snils: Locator;
}
export declare class BasePage {
    protected page: Page;
    ModalWindowBody: Locator;
    /** Общий локатор модального диалога (role="dialog") для использования в дочерних страницах */
    protected modalDialog: Locator;
    /**
     * Общие локаторы для стандартных кнопок модальных окон
     * Могут быть переопределены в наследниках при необходимости
     */
    protected commonModalWindowButtons: CommonModalWindowButtons;
    protected orgCoreTextFields: OrgCoreTextFields;
    protected userCoreTextFields: UserCoreTextFields;
    formHelper: FormHelper;
    rowActionsHelper: RowActionsHelper;
    certificateHelper: CertificateHelper;
    textUtils: TextUtils;
    /** Текущая роль для теста, устанавливается через setRole в фикстуре */
    protected role?: Role;
    constructor(page: Page);
    /**
     * Устанавливает роль пользователя для Page-объекта.
     * Рекомендуется вызывать из фикстур перед использованием страницы/карточки.
     */
    setRole(role: Role): void;
    /**
     * Возвращает установленную роль или кидает понятную ошибку, если роль не задана.
     */
    protected getRoleOrThrow(): Role;
    /**
     * Получить общие локаторы модальных окон
     * @returns Record с общими локаторами кнопок модальных окон
     */
    getCommonModalWindowButtons(): CommonModalWindowButtons;
    /** Возвращает общий локатор модального диалога для использования в локаторах страниц */
    getModalDialog(): Locator;
    /**
     * Получить общие локаторы полей данных о организации
     * @returns Record с общими локаторами кнопок модальных окон
     */
    getOrgCoreTextFields(): OrgCoreTextFields;
    /**
     * Получить общие локаторы полей данных пользователя
     * @returns Record с общими локаторами кнопок модальных окон
     */
    getUserCoreTextFields(): UserCoreTextFields;
    /**
     * Переход на страницу с обработкой ошибок
     * @param path - путь к странице
     */
    goto(path: string): Promise<void>;
    /**
     * Обновление страницы
     */
    reloadPage(): Promise<void>;
    /**
   * Прокрутка к элементу
   */
    scrollToElement(locator: Locator): Promise<void>;
    /**
     * Приватный метод для обработки ошибок, всплывших на UI
     * @returns Список видимых ошибок
     */
    private findVisibleErrors;
    /**
     * Поиск ошибок на UI
     * Применяется для обработки ошибки на пограничных действиях в других методах
     * @returns Массив обнаруженных ошибок или void
     */
    protected tryFindErrorMessage(): Promise<string[] | void>;
    /**
     * Проверяет на отсутствие ошибок
     * Например, после перехода на страницу
     */
    assertNoErrorMessages(): Promise<void>;
    /**
     * Выполняет терминальное действие в модальном окне: нажатие кнопки (Сохранить, Закрыть и т.п.),
     * ожидание скрытия модального окна и проверка отсутствия сообщений об ошибках.
     * @param terminalButton - локатор кнопки терминального действия (Сохранить, Закрыть и т.д.)
     * @param modalWindowBody - локатор тела модального окна
     * @param stepName - название шага в отчёте (по умолчанию "Терминальное действие модального окна")
     * @returns true если модальное окно успешно закрыто, false в случае ошибки
     */
    performModalTerminalActionToCloseModalWindow(terminalButton: Locator, modalWindowBody: Locator, stepName?: string): Promise<void>;
    /**
     * Подтверждение действия в всплывающем диалоге.
     */
    confirmAction(): Promise<void>;
    checkPageTitle(title: string): Promise<void>;
    checkSuccessMessage(message: string): Promise<void>;
    /**
     * Публичные обертки для методов RowActionsHelper
     */
    protected openRowActionsMenuBase(menuButtonLocator: Locator): Promise<void>;
    protected closeRowActionsMenuBase(): Promise<void>;
    protected clickRowActionBase(actionKey: string, rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null): Promise<void>;
    protected checkRowActionsBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null): Promise<void>;
    protected editRowBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null, modalWindowBody?: Locator): Promise<boolean>;
    protected viewRowBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null, modalWindowBody?: Locator): Promise<boolean>;
    protected deleteRowBase(rowActionsConfig: GridRowActionsConfiguration, rowActionButtons?: Record<string, Locator> | null, rowActionMenuItems?: Record<string, Locator> | null, confirmDelete?: boolean): Promise<boolean>;
    protected editRowAndVerifyBase(editRowFn: () => Promise<boolean>, formFields: FormFieldsData, getModalFormLocators: (key?: string) => FormFieldsLocators | null, getModalWindowButtons: (key?: string) => Record<string, Locator> | null, saveButtonKey: string, verifyFn: () => Promise<void>): Promise<void>;
    protected viewRowAndVerifyBase(viewRowFn: () => Promise<boolean>, expectedData: Record<string, string>, getModalWindowInputs: (key?: string) => Record<string, Locator> | null, getModalWindowButtons: (key?: string) => Record<string, Locator> | null): Promise<void>;
    protected deleteRowAndVerifyBase(findRowFn: () => Promise<Locator | null>, deleteRowFn: (row: Locator) => Promise<void>, findRowSilentFn: () => Promise<Locator | null>, rowData: Record<string, string>): Promise<void>;
}
