"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
function _export(target, all) {
    for(var name in all)Object.defineProperty(target, name, {
        enumerable: true,
        get: Object.getOwnPropertyDescriptor(all, name).get
    });
}
_export(exports, {
    get getBaseGridView () {
        return getBaseGridView;
    },
    get getColTokens () {
        return getColTokens;
    },
    get getGridViewClass () {
        return getGridViewClass;
    },
    get gridSizes () {
        return gridSizes;
    }
});
const _Gridtokens = require("../Grid.tokens");
const gridSizes = [
    'smallXXS',
    'smallXS',
    'smallS',
    'smallM',
    'smallL',
    'smallXL',
    'smallXXL',
    'mediumXXS',
    'mediumXS',
    'mediumS',
    'mediumM',
    'mediumL',
    'mediumXL',
    'mediumXXL',
    'largeXXS',
    'largeXS',
    'largeS',
    'largeM',
    'largeL',
    'largeXL',
    'largeXXL'
];
// TODO удалить после отказа от старой сетки
const legacyGridSizesMap = {
    S: 'smallM',
    M: 'mediumS',
    L: 'mediumM',
    XL: 'largeS',
    XXL: 'largeM'
};
const tokenPrefix = '--plasma-grid-';
const initialGridViewStyle = `
    max-width: var(--plasma_private-grid-max-width, unset);
`;
const getGridViewClass = (view)=>{
    return `plasma-grid-${view}-view`;
};
/**
 * Генерирует набор медиа-запросов под различную ширину вьюпорта
 *
 * @param {GridToken} cssTokens - объект view с набором токенов ширины вьюпорта
 * @return {string} сгенерированный набор медиа-запросов
 */ const gridMediaQueryTemplate = (breakpoints)=>{
    return gridSizes.map((size)=>{
        if (!String(breakpoints[`${tokenPrefix}${size}-min-width`])) {
            return;
        }
        const minWidth = breakpoints[`${tokenPrefix}${size}-min-width`];
        const gap = _Gridtokens.tokens[`${size}Gap`];
        const colsCount = _Gridtokens.tokens[`${size}ColsCount`];
        const margin = _Gridtokens.tokens[`${size}Margin`];
        return `
                @media (min-width: ${minWidth}) {
                    --plasma_private-grid-cols-count: var(${colsCount});
                    --plasma_private-grid-gap: calc(var(${gap}) / 2);
                    --plasma_private-grid-margin: var(${margin});
                    
                    padding: 0 var(--plasma_private-grid-margin);

                    .${_Gridtokens.classes.col} {
                        --plasma_private-col-width: calc(100% / var(--plasma_private-grid-cols-count) * var(--plasma_private-grid-col-${size}-size, var(--plasma_private-grid-col-default-size)));
                        --plasma_private-col-offset: calc(100% / var(--plasma_private-grid-cols-count) * var(--plasma_private-grid-col-${size}-offset, var(--plasma_private-grid-col-default-offset)));

                        width: var(--plasma_private-col-width, auto);
                        margin-left: var(--plasma_private-col-offset, initial);
                    }
                }
            `;
    }).filter((style)=>style).join('\n');
};
const getBaseGridView = (breakponts, viewName)=>{
    return `
        ${initialGridViewStyle}

        &.${getGridViewClass(viewName)} {
            ${gridMediaQueryTemplate(breakponts)}
        }
    `;
};
/**
 * Используется для получения токенов для view="legacy"
 */ // TODO удалить после отказа от старой сетки
const getColLegacyTokens = (props)=>{
    return Object.entries(legacyGridSizesMap).reduce((acc, [legacyGridSize, gridSize])=>{
        const offset = props[`offset${legacyGridSize}`];
        const size = props[`size${legacyGridSize}`];
        if (!offset && !size) {
            return acc;
        }
        return {
            ...acc,
            [`--plasma_private-grid-col-${gridSize}-size`]: size,
            [`--plasma_private-grid-col-${gridSize}-offset`]: offset
        };
    }, {});
};
const getColTokens = (props)=>{
    // TODO удалить после отказа от старой сетки
    const legacyTokens = getColLegacyTokens(props);
    if (Object.keys(legacyTokens).length) {
        return legacyTokens;
    }
    return gridSizes.reduce((acc, size)=>{
        if (!props[size]) {
            return acc;
        }
        return {
            ...acc,
            [`--plasma_private-grid-col-${size}-size`]: props[size]?.size,
            [`--plasma_private-grid-col-${size}-offset`]: props[size]?.offset
        };
    }, {});
};
