(function () {
    'use strict';

    if (window.BXCatalogSort) return;

    window.BXCatalogSort = function () {
        var container = document.querySelector('[data-entity="catalog-sort"]');
        if (!container) return;

        this.container = container;
        this.catalogContainer = document.querySelector('[data-entity="catalog-section-container"]');

        var buttons = container.querySelectorAll('.catalog-sort__btn');
        for (var i = 0; i < buttons.length; i++) {
            BX.bind(buttons[i], 'click', this.onClick.bind(this));
        }
    };

    window.BXCatalogSort.prototype.onClick = function (e) {
        var btn = e.target.closest ? e.target.closest('.catalog-sort__btn') : e.target;
        if (!btn || BX.hasClass(btn, 'active')) return;

        var field = btn.getAttribute('data-field');
        var order = btn.getAttribute('data-order');
        var self = this;

        // Читаем параметры каталога из data-атрибута
        var paramsStr = this.container.getAttribute('data-params') || '{}';
        var params;
        try {
            params = JSON.parse(paramsStr);
        } catch (err) {
            params = {};
        }

        BX.ajax.runAction('mibazarow:bxstore.CatalogSortController.apply', {
            data: {
                field: field,
                order: order,
                params: params
            }
        }).then(function (response) {
            var data = response.data;

            // Если ответ содержит HTML (renderComponentAjax), заменяем блок товаров
            if (data && data.html && self.catalogContainer) {
                // Обработка CSS-ресурсов
                if (data.assets && data.assets.css && data.assets.css.length) {
                    for (var i = 0; i < data.assets.css.length; i++) {
                        BX.loadCSS(data.assets.css[i]);
                    }
                }

                // Замена контента (BX.html обрабатывает скрипты)
                BX.html(self.catalogContainer, data.html).then(function () {
                    self.updateActiveButtons(field, order);
                });
            } else {
                // Старый ответ без HTML — просто перезагружаем
                window.location.reload();
            }
        }).catch(function (err) {
            console.error('Catalog sort error:', err);
        });
    };

    window.BXCatalogSort.prototype.updateActiveButtons = function (field, order) {
        var buttons = this.container.querySelectorAll('.catalog-sort__btn');
        for (var i = 0; i < buttons.length; i++) {
            var btn = buttons[i];
            if (btn.getAttribute('data-field') === field && btn.getAttribute('data-order') === order) {
                BX.addClass(btn, 'active');
            } else {
                BX.removeClass(btn, 'active');
            }
        }
    };

    BX.ready(function () {
        new BXCatalogSort();
    });
})();
