import { Controller } from 'stimulus';
const helper = require("./../components/helper.js");

export default class extends Controller {
    connect() {
        let showContent = this.element.parentElement.querySelector('.show-content');
        const input = this.element;

        const searchConfig = {
            'name': {
                url: '/specialists',
                paramName: 'specialist_search[name]',
                encodedParam: 'specialist_search%5Bname%5D'
            },
            'pl': {
                url: '/stoimost-uslug',
                paramName: 'price_list_form[schname]',
                encodedParam: 'price_list_form%5Bschname%5D'
            },
            'dep': {
                url: '/specialists',
                paramName: 'specialist_search[depname]',
                encodedParam: 'specialist_search%5Bdepname%5D'
            }
        };

        const performSearch = () => {
            const selectSearch = document.getElementById("select-search").value;
            const searchValue = input.value.trim();
            
            if (!searchValue) return;
            
            const config = searchConfig[selectSearch];
            if (!config) return;
            
            // Извлекаем alias из текущего URL, если он есть
            const currentPath = window.location.pathname;
            const aliasMatch = currentPath.match(/\/specialists\/([^\/]+)/);
            const alias = aliasMatch ? aliasMatch[1] : null;
            
            // Создаем URL с параметром поиска, сохраняя alias если он есть
            const encodedValue = encodeURIComponent(searchValue);
            let baseUrl = config.url;
            if (alias && (selectSearch === 'name' || selectSearch === 'dep')) {
                baseUrl = `/specialists/${alias}`;
            }
            const searchUrl = `${baseUrl}?${config.encodedParam}=${encodedValue}`;
            
            console.log('Редирект на:', searchUrl);
            window.location.href = searchUrl;
        };

        // Функция для автодополнения (при вводе 3+ символов)
        const handleAutocomplete = (searchValue, selectSearch) => {
            const onlineMode = location.pathname.includes('/online-specialists') ? 1 : 0;

            if (searchValue.length >= 3 && selectSearch !== 'pl') {
                let data = {
                    q: searchValue,
                    type: selectSearch,
                    onlineMode: onlineMode
                };

                showContent.innerText = '';
                showContent.classList.add('d-none');

                helper.sendRequest(data, "/api/search", "POST").then(function (response) {
                    showContent.innerHTML = '';
                    const ul = document.createElement('ul');
                    const { data: searchData } = response;
                    
                    const listItemsHTML = searchData.map(el => {
                        const { alias, name, speciality } = el;
                        const config = searchConfig[selectSearch];
                        
                        let url;
                        // Извлекаем alias из текущего URL, если он есть
                        const currentPath = window.location.pathname;
                        const currentAliasMatch = currentPath.match(/\/specialists\/([^\/]+)/);
                        const currentAlias = currentAliasMatch ? currentAliasMatch[1] : null;
                        
                        if (selectSearch === 'name') {
                            url = `/specialist/${alias}?specialist_search[onlineMode]=${onlineMode}`;
                        } else if (selectSearch === 'pl') {
                            url = `/stoimost-uslug?${config.encodedParam}=${encodeURIComponent(name)}`;
                        } else if (selectSearch === 'dep') {
                            // Сохраняем текущий alias при поиске по отделению
                            const depUrl = currentAlias ? `/specialists/${currentAlias}` : '/specialists';
                            url = `${depUrl}?${config.encodedParam}=${encodeURIComponent(name)}`;
                        }
                        
                        return `
                            <li>
                                <a href="${url}" class="search-result-link">
                                    <span class="result-name">${name}</span>
                                    ${speciality ? `<span class="result-speciality">, ${speciality}</span>` : ''}
                                </a>
                            </li>
                        `;
                    }).join('');

                    ul.innerHTML = listItemsHTML;
                    showContent.append(ul);
                    showContent.classList.remove('d-none');
                });
            } else {
                showContent.classList.add('d-none');
            }
        };

        // Обработчик ввода в поле поиска
        input.oninput = function(e) {
            const selectSearch = document.getElementById("select-search").value;
            const searchValue = e.target.value;
            
            handleAutocomplete(searchValue, selectSearch);
        };

        // Обработчик нажатия Enter
        input.addEventListener('keyup', function (evn) {
            if (evn.keyCode == 13) { // Enter
                evn.preventDefault();
                performSearch();
            }
        });

        // Делаем функцию доступной глобально для другого контроллера
        window.performSearch = performSearch;
        window.handleAutocomplete = handleAutocomplete;
        
        // Инициализация значения из текущего параметра URL
        this.initializeFromUrl();
    }
    
    // Метод для инициализации значения поля из параметров URL
    initializeFromUrl() {
        const input = this.element;
        const urlParams = new URLSearchParams(window.location.search);
        const selectSearch = document.getElementById("select-search").value;
        
        const searchConfig = {
            'name': ['specialist_search[name]', 'specialist_search%5Bname%5D'],
            'pl': ['price_list_form[schname]', 'price_list_form%5Bschname%5D'],
            'department': ['specialist_search[department]', 'specialist_search%5Bdepartment%5D']
        };
        
        const config = searchConfig[selectSearch];
        if (config) {
            // Пробуем получить значение из разных вариантов параметра
            let searchValue = urlParams.get(config[0]) || 
                            urlParams.get(config[1]) ||
                            urlParams.get(decodeURIComponent(config[1]));
            
            if (searchValue) {
                input.value = searchValue;
                
                // Если есть значение, показываем автодополнение
                setTimeout(() => {
                    window.handleAutocomplete && window.handleAutocomplete(searchValue, selectSearch);
                }, 100);
            }
        }
    }
}