"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseArchivePage = void 0;
const test_1 = require("@playwright/test");
const BasePage_1 = require("./BasePage/BasePage");
const logger_1 = require("../utils/logger");
class BaseArchivePage extends BasePage_1.BasePage {
    constructor(page) {
        super(page);
    }
    /**
     * Совокупная проверка содержания грида для элемента списка
     */
    async checkArchiveListItems(role) {
        logger_1.logger.debug(`Проверка содержания страницы для роли ${role}`, `${this.constructor.name}.checkArchiveListItems`);
        const config = this.getArchiveConfiguration(role);
        for (const listItemKey of config.listItem.concat(config.notVisibleListItems)) {
            if (!this.PageListItems[listItemKey]) {
                logger_1.logger.warn(`Элемент списка с ключом ${listItemKey} не найден в PageListItems`, `${this.constructor.name}.checkArchiveListItems`);
                continue;
            }
            try {
                logger_1.logger.debug(`Проверка элемента списка ${listItemKey}`, `${this.constructor.name}.checkArchiveListItems`);
                if (config.notVisibleListItems.includes(listItemKey)) {
                    await (0, test_1.expect)(this.PageListItems[listItemKey]).toBeHidden();
                    logger_1.logger.info(`Элемент списка ${listItemKey} успешно скрыт`, `${this.constructor.name}.checkArchiveListItems`);
                }
                else if ((config.listItemWithInput.includes(listItemKey)) && (!config.notVisibleListItems.includes(listItemKey))) {
                    await (0, test_1.expect)(this.PageListItems[listItemKey]).toBeVisible();
                    await this.PageListItems[listItemKey].click();
                    await (0, test_1.expect)(this.GridInputs.input).toBeVisible();
                }
                else {
                    await (0, test_1.expect)(this.PageListItems[listItemKey]).toBeVisible();
                    await (0, test_1.expect)(this.PageListItems[listItemKey]).toBeEnabled();
                    logger_1.logger.info(`Элемент списка ${listItemKey} успешно отображается и кликабелен`, `${this.constructor.name}.checkArchiveListItems`);
                }
            }
            catch (error) {
                logger_1.logger.error(`Ошибка при проверке элемента списка ${listItemKey}: ${error}`, `${this.constructor.name}.checkArchiveListItems`);
                throw error;
            }
        }
    }
    /**
     * Проверяет видимость кнопок грида в зависимости от роли
     */
    async checkGridButtons(role) {
        logger_1.logger.debug(`Проверка кнопок грида для роли ${role}`, `${this.constructor.name}.checkGridButtons`);
        const config = this.getArchiveConfiguration(role);
        for (const buttonKey of config.buttons) {
            if (!this.GridButtons[buttonKey]) {
                logger_1.logger.warn(`Кнопка с ключом ${buttonKey} не найдена в GridButtons`, `${this.constructor.name}.checkGridButtons`);
                continue;
            }
            try {
                logger_1.logger.debug(`Проверка кнопки ${buttonKey}`, `${this.constructor.name}.checkGridButtons`);
                await (0, test_1.expect)(this.GridButtons[buttonKey]).toBeVisible();
                logger_1.logger.info(`Кнопка ${buttonKey} успешно отображается`, `${this.constructor.name}.checkGridButtons`);
            }
            catch (error) {
                logger_1.logger.error(`Ошибка при проверке кнопки ${buttonKey}: ${error}`, `${this.constructor.name}.checkGridButtons`);
                throw error;
            }
        }
        logger_1.logger.info(`Проверка кнопок грида завершена. Проверено кнопок: ${config.buttons.length}`, `${this.constructor.name}.checkGridButtons`);
    }
    /**
     * Проверяет видимость колонок грида в зависимости от роли
     */
    async checkGridColumns(role) {
        logger_1.logger.debug(`Проверка колонок грида для роли ${role}`, `${this.constructor.name}.checkGridColumns`);
        const config = this.getArchiveConfiguration(role);
        for (const columnKey of config.columns) {
            if (!this.GridColumns[columnKey]) {
                logger_1.logger.warn(`Колонка с ключом ${columnKey} не найдена в GridColumns`, `${this.constructor.name}.checkGridColumns`);
                continue;
            }
            try {
                logger_1.logger.debug(`Проверка колонки ${columnKey}`, `${this.constructor.name}.checkGridColumns`);
                await (0, test_1.expect)(this.GridColumns[columnKey]).toBeVisible();
                logger_1.logger.info(`Колонка ${columnKey} успешно отображается`, `${this.constructor.name}.checkGridColumns`);
            }
            catch (error) {
                logger_1.logger.error(`Ошибка при проверке колонки ${columnKey}: ${error}`, `${this.constructor.name}.checkGridColumns`);
                throw error;
            }
        }
        logger_1.logger.info(`Проверка колонок грида завершена. Проверено колонок: ${config.columns.length}`, `${this.constructor.name}.checkGridColumns`);
    }
    /**
    * Проверяем кейс, что грид не содержит сообщение об отсутствии данных
    */
    async checkGridHaveCells(role) {
        logger_1.logger.info(`Проверка, что грид не содержит сообщение об отсутствии данных для роли ${role}`, `${this.constructor.name}.checkGridHaveCells`);
        const config = this.getArchiveConfiguration(role);
        await (0, test_1.expect)(config.gridBody).not.toContainText('По вашему запросу ничего не найдено');
    }
    /**
     * Проверяет все элементы грида (кнопки, поля, колонки) в зависимости от роли
     */
    async checkAllGridElements(role) {
        logger_1.logger.info(`Проверка всех элементов грида для роли ${role}`, `${this.constructor.name}.checkAllGridElements`);
        await this.checkGridButtons(role);
        await this.checkArchiveListItems(role);
        await this.checkGridColumns(role);
        logger_1.logger.info(`Проверка всех элементов грида завершена успешно`, `${this.constructor.name}.checkAllGridElements`);
    }
}
exports.BaseArchivePage = BaseArchivePage;
