"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FilterVisibilityUtils = void 0;
const logger_1 = require("../../../utils/logger");
/**
 * Утилиты проверки видимости фильтров (text / combobox / daData) по конфигурации.
 */
class FilterVisibilityUtils {
    /**
     * Проверяет, задана ли хотя бы одна группа фильтров в конфигурации.
     * @param config — конфигурация страницы/блока с полями *Filters
     */
    static hasAnyConfiguredFilters(config) {
        return (config.textFilters != null ||
            config.comboboxFilters != null ||
            config.daDataFilters != null ||
            config.notVisibleTextFilters != null ||
            config.notVisibleComboboxFilters != null ||
            config.notVisibleDaDataFilters != null);
    }
    /**
     * Собирает группы фильтров из конфигурации и соответствующих локаторов.
     * Группа включается, если в конфиге заданы visible и/или hidden ключи этого типа.
     * @param config — конфигурация с text/combobox/daData фильтрами
     * @param locators — карты локаторов по типам фильтров
     */
    static buildGroups(config, locators) {
        const groups = [];
        if (config.textFilters != null || config.notVisibleTextFilters != null) {
            groups.push({
                label: 'текстовые поля фильтрации',
                visibleKeys: config.textFilters,
                hiddenKeys: config.notVisibleTextFilters,
                locators: locators.text,
            });
        }
        if (config.comboboxFilters != null || config.notVisibleComboboxFilters != null) {
            groups.push({
                label: 'combobox поля фильтрации',
                visibleKeys: config.comboboxFilters,
                hiddenKeys: config.notVisibleComboboxFilters,
                locators: locators.combobox,
            });
        }
        if (config.daDataFilters != null || config.notVisibleDaDataFilters != null) {
            groups.push({
                label: 'DaData поля фильтрации',
                visibleKeys: config.daDataFilters,
                hiddenKeys: config.notVisibleDaDataFilters,
                locators: locators.daData,
            });
        }
        return groups;
    }
    /**
     * Проверяет видимость всех заданных групп фильтров.
     * Группы без локаторов пропускаются с предупреждением.
     * @param visibilityChecker — общий checker видимости
     * @param groups — группы фильтров к проверке
     * @param options.logContext — контекст для логов
     * @param options.stepTitlePrefix — префикс названия test.step
     * @returns число фактически запущенных проверок групп
     */
    static async checkGroups(visibilityChecker, groups, options) {
        const { logContext, stepTitlePrefix } = options;
        const checks = [];
        for (const group of groups) {
            if (!group.locators) {
                logger_1.logger.warn(`Локаторы для группы «${group.label}» не найдены — проверка пропущена`, logContext);
                continue;
            }
            checks.push(visibilityChecker.checkElementsVisibility({
                locators: group.locators,
                visibleKeys: group.visibleKeys ?? [],
                hiddenKeys: group.hiddenKeys,
                logContext,
                stepTitle: `${stepTitlePrefix}: ${group.label}`,
                elementLabel: group.label,
            }));
        }
        await Promise.all(checks);
        return checks.length;
    }
}
exports.FilterVisibilityUtils = FilterVisibilityUtils;
