<!-- Select2 Product Search Initialization -->
<!-- Используется для инициализации Select2 с AJAX поиском товаров -->
<!-- Требует: jQuery, Select2 CSS/JS, и переменные: apiUrl, containerSelector, fieldNamePattern -->

<script>
(function() {
    // Функции форматирования для Select2
    function formatSelectResult(item) {
        if (item.loading) return item.text;
        var $container = $('<div class="select2-result-item">');
        $container.text(item.text);

        // Отображаем actual_price (цену со скидкой если она есть), иначе обычную цену
        var displayPrice = item.actual_price || item.price;
        if (displayPrice) {
            $container.append($('<div class="text-muted small">').text(displayPrice + ' руб.'));
        }
        return $container;
    }

    function formatSelectSelection(item) {
        if (!item.id) return item.text;

        // Сохраняем данные о цене в атрибуты DOM элемента для доступа через jQuery .data()
        if (item.element) {
            if (item.price !== undefined) {
                $(item.element).attr('data-price', item.price);
            }
            if (item.actual_price !== undefined) {
                $(item.element).attr('data-actual_price', item.actual_price);
            }
        }

        // Показываем только текст при выборе, цена будет обновляться в JavaScript
        return item.text || item.id;
    }

    /**
     * Инициализирует Select2 для элемента с AJAX поиском товаров
     * @param {Element} element - DOM элемент select
     * @param {string} type - Тип поиска ('product', 'variant' или 'sales_unit')
     * @param {string} apiUrl - URL API для поиска
     * @returns {boolean} - true если инициализация прошла успешно, false иначе
     */
    window.initProductSelect2 = function(element, type, apiUrl) {
        // Валидация входных параметров
        if (!element) {
            console.error('initProductSelect2: element is null or undefined');
            return false;
        }

        if (!apiUrl || typeof apiUrl !== 'string') {
            console.error('initProductSelect2: invalid apiUrl', apiUrl);
            return false;
        }

        // Проверка загрузки jQuery и Select2
        if (typeof $ === 'undefined' || typeof $.fn.select2 === 'undefined') {
            console.error('initProductSelect2: jQuery or Select2 not loaded');
            return false;
        }

        var $element = $(element);

        // Улучшенная проверка инициализации
        if ($element.hasClass('select2-hidden-accessible')) {
            console.log('initProductSelect2: already initialized, skipping', element.name);
            return true; // Уже инициализирован - это не ошибка
        }

        var placeholders = {
            'product': 'Начните вводить название товара...',
            'variant': 'Начните вводить название группы...',
            'sales_unit': 'Выберите единицу продажи...'
        };

        // Для единиц продажи используем другой подход - не AJAX, а загрузка при выборе товара
        if (type === 'sales_unit') {
            try {
                $element.select2({
                    theme: 'bootstrap-5',
                    placeholder: placeholders[type] || 'Выберите...',
                    allowClear: true,
                    width: '100%',
                    language: 'ru',
                    minimumInputLength: 0,
                    dropdownAutoWidth: false,
                    // Для единиц продажи не используем AJAX, т.к. они загружаются при выборе товара
                    disabled: true, // Изначально отключен до выбора товара
                    templateResult: formatSelectResult,
                    templateSelection: formatSelectSelection
                });
                console.log('initProductSelect2: successfully initialized sales_unit for', element.name);
                return true;
            } catch (error) {
                console.error('initProductSelect2: initialization error for sales_unit', error);
                return false;
            }
        } else {
            // Для товаров и вариантов используем AJAX
            try {
                $element.select2({
                    theme: 'bootstrap-5',
                    placeholder: placeholders[type] || 'Выберите...',
                    allowClear: true,
                    width: '100%',
                    language: 'ru',
                    minimumInputLength: 0,
                    dropdownAutoWidth: false,
                    ajax: {
                        url: apiUrl,
                        dataType: 'json',
                        delay: 250,
                        data: function (params) {
                            return {
                                q: params.term || '',
                                type: type,
                                page: params.page || 1
                            };
                        },
                        processResults: function (data) {
                            return {
                                results: data.results,
                                pagination: {
                                    more: data.pagination.more
                                }
                            };
                        },
                        cache: true
                    },
                    templateResult: formatSelectResult,
                    templateSelection: formatSelectSelection
                });
                console.log('initProductSelect2: successfully initialized for', element.name);
                return true;
            } catch (error) {
                console.error('initProductSelect2: initialization error', error);
                return false;
            }
        }
    };

    /**
     * Инициализирует Select2 для всех селектов, совпадающих с паттерном
     * @param {string} fieldPattern - Паттерн name атрибута (например: 'items-', 'kititem-')
     * @param {string} type - Тип поиска ('product', 'variant' или 'sales_unit')
     * @param {string} apiUrl - URL API для поиска
     */
    window.initAllProductSelect2 = function(fieldPattern, type, apiUrl) {
        if (type === 'sales_unit') {
            document.querySelectorAll('[name*="' + fieldPattern + '"][name*="-sales_unit"]').forEach(function(element) {
                window.initProductSelect2(element, type, apiUrl);
            });
        } else {
            document.querySelectorAll('[name*="' + fieldPattern + '"][name*="-product"]').forEach(function(element) {
                window.initProductSelect2(element, type, apiUrl);
            });
        }
    };
})();
</script>
