'use strict'

function page_profile_panel_notification_create(form, html = 0) {
    if (form == undefined) {
        form = {
            '_csrf': yii.getCsrfToken()
        };
    } else {
        form = $(form).serializeArray();

        // Запись параметра типа уведомления (тест и html-код)
        form.push({
            name: 'Notification[html]',
            value: html
        });
    };

    return page_profile_panel_write(form);
};

function page_profile_panel_settings(form, panel) {
    if (form == undefined) {
        form = {
            '_csrf': yii.getCsrfToken()
        };

        if (panel !== undefined) {
            form.panel = panel;
        };
    } else {
        form = $(form).serializeArray();

        form.push({
            name: "panel",
            value: panel
        });
    };

    return page_profile_panel_write(form);
};

function page_profile_panel_write(form) {
    $.ajax({
        url: '/profile/panel',
        type: 'post',
        dataType: 'json',
        data: form,
        success: page_profile_response_success,
        error: page_profile_response_error
    });

    return false;
};

function page_profile_panel_choose(button = 'profile_panel_input_accounts') {
    // Деинициализация всех вкладок
    document.getElementById('profile_panel_input_supplies').checked =
        document.getElementById('profile_panel_input_products').checked =
        document.getElementById('profile_panel_input_accounts').checked =
        document.getElementById('profile_panel_input_settings').checked =
        document.getElementById('profile_panel_input_notifications').checked = false;

    document.getElementById('profile_panel_input_supplies').setAttribute('onclick', 'return page_profile_panel_choose(\'profile_panel_input_supplies\');');
    document.getElementById('profile_panel_input_products').setAttribute('onclick', 'return page_profile_panel_choose(\'profile_panel_input_products\');');
    document.getElementById('profile_panel_input_notifications').setAttribute('onclick', 'return page_profile_panel_choose(\'profile_panel_input_notifications\');');
    document.getElementById('profile_panel_input_accounts').setAttribute('onclick', 'return page_profile_panel_choose(\'profile_panel_input_accounts\');');
    document.getElementById('profile_panel_input_settings').setAttribute('onclick', 'return page_profile_panel_choose(\'profile_panel_input_settings\');');

    document.querySelector('[for="profile_panel_input_supplies"]').classList.remove('active');
    document.querySelector('[for="profile_panel_input_products"]').classList.remove('active');
    document.querySelector('[for="profile_panel_input_accounts"]').classList.remove('active');
    document.querySelector('[for="profile_panel_input_notifications"]').classList.remove('active');
    document.querySelector('[for="profile_panel_input_settings"]').classList.remove('active');

    if (button === 'profile_panel_input_products') {
        // Открытие вкладки с товарами

        profile_panel_products_read('@last', 'all', '@last', '@last', 1, true);
    }

    if (button === 'profile_panel_input_supplies') {
        // Открытие вкладки с поставками

        profile_panel_supplies_read(1, true);
    }

    if (button === 'profile_panel_input_accounts') {
        // Инициализация подвкладки по умолчанию для вкладки "аккаунты"

        page_profile_panel_accounts_choose(undefined, true);
    } else if (button === 'profile_panel_input_accounts_control') {
        // Инициализация подвкладки "пользователи" для вкладки "аккаунты"

        page_profile_panel_accounts_choose('profile_panel_input_accounts_control', true);

        button = 'profile_panel_input_accounts';
    } else if (button === 'profile_panel_input_accounts_suppliers') {
        // Инициализация подвкладки "поставщики" для вкладки "аккаунты"

        page_profile_panel_accounts_choose('profile_panel_input_accounts_suppliers', true);

        button = 'profile_panel_input_accounts';
    } else {
        // Деиницилизация подкладок для вкладки "аккаунты"

        page_profile_panel_accounts_choose('disable', true);
    }

    // Активация запрошенной вкладки
    document.getElementById(button).checked = true;
    document.getElementById(button).removeAttribute('onclick');
    document.querySelector('[for="' + button + '"]').classList.add('active');
}

function page_profile_panel_accounts_choose(button = 'profile_panel_input_accounts_control', active = false) {
    if (active === false) {
        // Вкладка не активна

        // Открытие вкладки с этими подвкладками
        page_profile_panel_choose('profile_panel_input_accounts');
    }

    // Деинициализация всех вкладок
    document.getElementById('profile_panel_input_accounts_suppliers').checked =
        document.getElementById('profile_panel_input_accounts_control').checked = false

    document.getElementById('profile_panel_input_accounts_suppliers').setAttribute('onclick', 'return page_profile_panel_choose(\'profile_panel_input_accounts_suppliers\');');
    document.getElementById('profile_panel_input_accounts_control').setAttribute('onclick', 'return page_profile_panel_choose(\'profile_panel_input_accounts_control\');');

    document.querySelector('[for="profile_panel_input_accounts_suppliers"]').classList.remove('active');
    document.querySelector('[for="profile_panel_input_accounts_control"]').classList.remove('active');

    if (button === 'disable') {

        return;
    } else if (button === 'profile_panel_input_accounts_control') {
        // Блок: "пользователи"

        // Генерация списка
        profile_panel_accounts_read(1, true);
    } else if (button === 'profile_panel_input_accounts_suppliers') {
        // Блок: "поставщики"

        // Генерация списка
        page_profile_panel_input_suppliers_requests_init(1);
    }

    // Инициализация запрошенной вкладки
    document.getElementById(button).checked = true;
    document.getElementById(button).removeAttribute('onclick');
    document.querySelector('[for="' + button + '"]').classList.add('active');
}

function page_profile_panel_input_suppliers_requests_init(page = 1, id = 'profile_panel_input_suppliers_requests') {
    // Инициализация содержимого блока "Заявки на регистрацию поставщиков"

    // Инициализация оболочки
    const wrap = document.getElementById(id);

    $.ajax({
        url: '/profile/panel/suppliers/requests/search/' + page,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: (data, status, xhr) => {
            // Обработка ответа

            if (data !== undefined) {
                // Получены данные с сервера

                if (data.suppliers !== undefined && data.suppliers !== null) {
                    // Найдены данные поставщиков

                    // Запись cookie с номером страницы
                    Cookies.set('page_profile_panel_input_suppliers_requests_init_page', parseInt(Cookies.get('page_profile_panel_input_suppliers_requests_init_page') ?? 1) + 1, { path: window.location.pathname });

                    // Удаление данных в оболочке
                    wrap.innerHTML = null;

                    for (let html of page_profile_panel_input_suppliers_requests_generate(data.suppliers)) {
                        // Перебор сгенерированных HTML-элементов

                        // Запись в документ
                        wrap.appendChild(html);
                    }

                    // Инициализация оболочки
                    let element = document.getElementById(id);

                    // Инициализация блокировщика
                    let block = false;

                    document.onscroll = function (e) {
                        // Обработчик события: "прокрутка экрана"

                        if (element.lastElementChild.getBoundingClientRect().y <= window.innerHeight) {
                            // Строка в области видимости окна

                            // Генерация и запись следующей страницы
                            if (!block) page_profile_panel_input_suppliers_requests_init(parseInt(Cookies.get('page_profile_panel_input_suppliers_requests_init_page')), id);

                            // Блокировка
                            block = true;
                        }
                    };
                }
            }

            // Переход к остальным обработчикам
            page_profile_response_success(data, status, xhr);
        },
        error: page_profile_response_error
    });
}

function page_profile_panel_input_suppliers_requests_generate(suppliers) {
    // Генерация HTML со списком заявок на регистрацию поставщиков

    // Инициализация буфера вывода
    let html = new Set;

    // Инициализация итератора
    let i = 0;

    for (let account of suppliers) {
        // Перебор данных поставщиков

        // Обновление счётчика
        ++i;

        // Инициализация контейнера
        let container = document.createElement('div');
        container.setAttribute('id', account._key);
        container.setAttribute('class', i < suppliers.length ? 'mb-3 px-3 py-1 row panel_supplier_request' : 'px-3 py-1 row panel_supplier_request');

        // Инициализация первой строки
        let row_1 = document.createElement('div');
        row_1.setAttribute('class', 'row px-0');

        // Инициализация колонки с метаданными аккаунта
        let block_metadata = document.createElement('div');
        block_metadata.setAttribute('id', 'metadata_' + account._key);
        block_metadata.setAttribute('class', 'col-4 pr-0 d-flex flex-column');

        // Инициализация оболочки идентификатора аккаунта
        let wrap_id = document.createElement('p');
        wrap_id.setAttribute('class', 'mt-0 mb-2 px-3 row');

        // Инициализация ярлыка идентификатора аккаунта
        let label_id = document.createElement('b');
        label_id.setAttribute('class', '');
        label_id.innerText = 'Договор:';

        // Инициализация значения идентификатора аккаунта
        let value_id = document.createElement('span');
        value_id.setAttribute('class', 'ml-auto');
        value_id.innerText = account._key;

        // Инициализация разделителя для даты
        let metadata_date_divider = document.createElement('div');
        metadata_date_divider.setAttribute('class', 'dropdown-divider mt-auto mx-2 mb-2');

        // Инициализация оболочки времени регистрации
        let wrap_regs = document.createElement('p');
        wrap_regs.setAttribute('class', 'mt-1 mb-2 px-3 row');

        // Инициализация ярлыка времени регистрации
        let label_regs = document.createElement('b');
        label_regs.setAttribute('class', '');
        label_regs.innerText = 'Регистрация:';

        // Инициализация значения времени регистрации
        let value_regs = document.createElement('span');
        value_regs.setAttribute('class', 'ml-auto');
        value_regs.innerText = moment.unix(account.date.regs).locale('ru-ru').format('DD.MM.YYYY');

        // Инициализация оболочки времени заявки
        let wrap_supl = document.createElement('p');
        wrap_supl.setAttribute('class', 'mt-0 mb-3 px-3 row');

        // Инициализация ярлыка времени заявки
        let label_supl = document.createElement('b');
        label_supl.setAttribute('class', '');
        label_supl.innerText = 'Заявка:';

        // Инициализация значения времени заявки
        let value_supl = document.createElement('span');
        value_supl.setAttribute('class', 'ml-auto');
        value_supl.innerText = moment.unix(account.date.supl).locale('ru-ru').format('DD.MM.YYYY');

        // Инициализация кнопки подтверждения
        let button_accept = document.createElement('a');
        button_accept.setAttribute('class', 'mb-2 btn form-control button_blue');
        button_accept.setAttribute('type', 'button');
        button_accept.setAttribute('role', 'button');
        button_accept.setAttribute('onclick', 'return profile_panel_input_suppliers_requests_block_accept(' + account._key + ');');
        button_accept.innerText = 'Подтвердить';

        // Инициализация кнопки отклонения
        let button_decline = document.createElement('a');
        button_decline.setAttribute('class', 'btn form-control button_red_softer');
        button_decline.setAttribute('type', 'button');
        button_decline.setAttribute('role', 'button');
        button_decline.setAttribute('onclick', 'return profile_panel_input_suppliers_requests_block_decline(' + account._key + ');');
        button_decline.innerText = 'Отклонить';

        // Инициализация колонки с основными данными аккаунта
        let block_info = document.createElement('div');
        block_info.setAttribute('id', '' + account._key);
        block_info.setAttribute('class', 'col-4 pl-0 d-flex flex-column');

        // Инициализация ярлыка "NAME"
        let label_name = document.createElement('label');
        label_name.setAttribute('class', 'control-label');
        label_name.innerText = 'Контактное лицо';

        // Инициализация поля "NAME"
        let input_name = document.createElement('input');
        input_name.setAttribute('id', 'name_' + account._key);
        input_name.setAttribute('class', 'form-control button_clean mb-3');
        input_name.setAttribute('type', 'text');
        input_name.setAttribute('placeholder', 'Иванов Иван Иванович');
        input_name.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "name", this.value);');
        input_name.value = account.name ?? '';

        // Инициализация ярлыка "BOSS"
        let label_boss = document.createElement('label');
        label_boss.setAttribute('class', 'control-label');
        label_boss.innerText = 'Директор';

        // Инициализация поля "BOSS"
        let input_boss = document.createElement('input');
        input_boss.setAttribute('id', 'boss_' + account._key);
        input_boss.setAttribute('class', 'form-control button_clean mb-3');
        input_boss.setAttribute('type', 'text');
        input_boss.setAttribute('placeholder', 'Иванов Иван Иванович');
        input_boss.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "boss", this.value);');
        input_boss.value = account.boss ?? '';

        // Инициализация ярлыка "SIMC" (телефон)
        let label_simc = document.createElement('label');
        label_simc.setAttribute('class', 'control-label');
        label_simc.innerText = 'Телефон';

        // Инициализация поля "SIMC" (телефон)
        let input_simc = document.createElement('input');
        input_simc.setAttribute('id', 'simc_' + account._key);
        input_simc.setAttribute('class', 'form-control button_clean mb-3');
        input_simc.setAttribute('type', 'number');
        input_simc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "simc", this.value);');
        input_simc.value = account.simc ?? '';

        // Инициализация ярлыка "MAIL"
        let label_mail = document.createElement('label');
        label_mail.setAttribute('class', 'control-label');
        label_mail.innerText = 'Почта';

        // Инициализация поля "MAIL"
        let input_mail = document.createElement('input');
        input_mail.setAttribute('id', 'mail_' + account._key);
        input_mail.setAttribute('class', 'form-control button_clean mb-3');
        input_mail.setAttribute('type', 'mail');
        input_mail.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "mail", this.value);');
        input_mail.value = account.mail ?? '';

        // Инициализация колонки с вторичными данными аккаунта
        let block_details = document.createElement('div');
        block_details.setAttribute('id', 'details_' + account._key);
        block_details.setAttribute('class', 'col-4 d-flex flex-column');

        // Инициализация ярлыка "INDX"
        let label_indx = document.createElement('label');
        label_indx.setAttribute('class', 'control-label');
        label_indx.innerText = 'Индекс';

        // Инициализация оболочки "INDX"
        let wrap_indx = document.createElement('div');
        wrap_indx.setAttribute('class', 'row mx-0 mb-3');

        // Инициализация поля "INDX"
        let input_indx = document.createElement('input');
        input_indx.setAttribute('id', 'indx_' + account._key);
        input_indx.setAttribute('class', 'col form-control button_clean');
        input_indx.setAttribute('type', 'text');
        input_indx.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "indx", this.value);');
        input_indx.value = account.indx ?? '';

        // Инициализация кнопки "INDX"
        let button_indx = document.createElement('a');
        button_indx.setAttribute('class', 'ml-2 my-auto text-dark');
        button_indx.setAttribute('type', 'button');
        button_indx.setAttribute('role', 'button');
        button_indx.innerHTML = '<i class="fas fa-redo-alt" onclick="return profile_panel_input_suppliers_requests_block_regen(' + account._key + ', \'indx\');"></i>';

        // // Инициализация ярлыка "PSWD"
        // let label_pswd = document.createElement('label');
        // label_pswd.setAttribute('class', 'control-label');
        // label_pswd.innerText = 'Пароль';

        // // Инициализация оболочки "PSWD"
        // let wrap_pswd = document.createElement('div');
        // wrap_pswd.setAttribute('class', 'row mx-0 mb-3');

        // // Инициализация поля "PSWD"
        // let input_pswd = document.createElement('input');
        // input_pswd.setAttribute('id', 'pswd_' + account._key);
        // input_pswd.setAttribute('class', 'col form-control button_clean');
        // input_pswd.setAttribute('type', 'text');
        // input_pswd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "pswd", this.value);');
        // input_pswd.value = account.pswd ?? '';

        // // Инициализация кнопки "PSWD"
        // let button_pswd = document.createElement('a');
        // button_pswd.setAttribute('class', 'ml-2 my-auto text-dark');
        // button_pswd.setAttribute('type', 'button');
        // button_pswd.setAttribute('role', 'button');
        // button_pswd.innerHTML = '<i class="fas fa-redo-alt"></i>';

        // Инициализация ярлыка "FILE"
        let label_file = document.createElement('label');
        label_file.setAttribute('class', 'control-label');
        label_file.innerText = 'Карточка предприятия';

        // Инициализация ссылки на "FILE"
        let button_file = document.createElement('a');
        button_file.setAttribute('class', 'btn form-control button_blue');
        button_file.setAttribute('href', account.data.file.uri);
        button_file.innerHTML = 'Скачать';

        // Инициализация ярлыка "TAXN"
        let label_taxn = document.createElement('label');
        label_taxn.setAttribute('class', 'control-label');
        label_taxn.innerText = 'ИНН';

        // Инициализация поля "TAXN"
        let input_taxn = document.createElement('input');
        input_taxn.setAttribute('id', 'taxn_' + account._key);
        input_taxn.setAttribute('class', 'form-control button_clean mb-3');
        input_taxn.setAttribute('type', 'text');
        input_taxn.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "taxn", this.value);');
        input_taxn.value = account.taxn ?? '';

        // Инициализация ярлыка "CNTG"
        let label_cntg = document.createElement('label');
        label_cntg.setAttribute('class', 'control-label');
        label_cntg.innerText = 'КПП';

        // Инициализация поля "CNTG"
        let input_cntg = document.createElement('input');
        input_cntg.setAttribute('id', 'cntg_' + account._key);
        input_cntg.setAttribute('class', 'form-control button_clean mb-3');
        input_cntg.setAttribute('type', 'text');
        input_cntg.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntg", this.value);');
        input_cntg.value = account.cntg ?? '';

        // Инициализация ярлыка "FADD"
        let label_fadd = document.createElement('label');
        label_fadd.setAttribute('class', 'control-label');
        label_fadd.innerText = 'Фактический адрес';

        // Инициализация поля "FADD"
        let input_fadd = document.createElement('input');
        input_fadd.setAttribute('id', 'fadd_' + account._key);
        input_fadd.setAttribute('class', 'form-control button_clean mb-3');
        input_fadd.setAttribute('type', 'text');
        input_fadd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "fadd", this.value);');
        input_fadd.value = account.fadd ?? '';

        // Инициализация ярлыка "LADD"
        let label_ladd = document.createElement('label');
        label_ladd.setAttribute('class', 'control-label');
        label_ladd.innerText = 'Юридический адрес';

        // Инициализация поля "LADD"
        let input_ladd = document.createElement('input');
        input_ladd.setAttribute('id', 'ladd_' + account._key);
        input_ladd.setAttribute('class', 'form-control button_clean mb-3');
        input_ladd.setAttribute('type', 'text');
        input_ladd.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "ladd", this.value);');
        input_ladd.value = account.ladd ?? '';

        // Инициализация ярлыка "COMP"
        let label_comp = document.createElement('label');
        label_comp.setAttribute('class', 'control-label');
        label_comp.innerText = 'Организация';

        // Инициализация поля "COMP"
        let input_comp = document.createElement('input');
        input_comp.setAttribute('id', 'comp_' + account._key);
        input_comp.setAttribute('class', 'form-control button_clean mb-3');
        input_comp.setAttribute('type', 'text');
        input_comp.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "comp", this.value);');
        input_comp.value = account.comp ?? '';

        // Инициализация ярлыка "CNTC"
        let label_cntc = document.createElement('label');
        label_cntc.setAttribute('class', 'control-label');
        label_cntc.innerText = 'Доп. информация';

        // Инициализация поля "CNTC"
        let input_cntc = document.createElement('textarea');
        input_cntc.setAttribute('id', 'cntc_' + account._key);
        input_cntc.setAttribute('class', 'form-control button_clean profile_panel_input_suppliers_requests_block_textarea');
        input_cntc.setAttribute('type', 'text');
        input_cntc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "cntc", this.value);');
        input_cntc.value = account.cntc ?? '';

        // Инициализация ярлыка "DESC"
        let label_desc = document.createElement('label');
        label_desc.setAttribute('class', 'control-label');
        label_desc.innerText = 'Описание';

        // Инициализация поля "DESC"
        let textarea_desc = document.createElement('textarea');
        textarea_desc.setAttribute('id', 'desc_' + account._key);
        textarea_desc.setAttribute('class', 'form-control button_clean mb-3 profile_panel_input_suppliers_requests_block_textarea');
        textarea_desc.setAttribute('type', 'text');
        textarea_desc.setAttribute('onchange', 'return profile_panel_input_suppliers_requests_block_edit(' + account._key + ', "desc", this.value);');
        textarea_desc.value = account.desc ?? '';

        // Инициализация разделителя для геолокации
        let metadata_geolocation_divider = document.createElement('div');
        metadata_geolocation_divider.setAttribute('class', 'dropdown-divider mx-2 mb-2');

        // Инициализация оболочки найденного по геолокации города
        let wrap_city = document.createElement('p');
        wrap_city.setAttribute('class', 'mt-1 mb-2 px-3 row');

        // Инициализация ярлыка найденного по геолокации города
        let label_city = document.createElement('b');
        label_city.setAttribute('class', '');
        label_city.innerText = 'Город:';

        // Инициализация значения найденного по геолокации города
        let value_city = document.createElement('span');
        value_city.setAttribute('class', 'ml-auto');
        value_city.innerText = account.city ?? 'Неизвестно';

        // Компоновка элементов блока с основной информацией
        block_info.appendChild(label_name);
        block_info.appendChild(input_name);

        block_info.appendChild(label_simc);
        block_info.appendChild(input_simc);

        block_info.appendChild(label_mail);
        block_info.appendChild(input_mail);

        block_info.appendChild(label_indx);
        wrap_indx.appendChild(input_indx);
        wrap_indx.appendChild(button_indx);
        block_info.appendChild(wrap_indx);

        // block_info.appendChild(label_pswd);
        // wrap_pswd.appendChild(input_pswd);
        // wrap_pswd.appendChild(button_pswd);
        // block_info.appendChild(wrap_pswd);

        block_info.appendChild(label_desc);
        block_info.appendChild(textarea_desc);

        block_info.appendChild(label_file);
        block_info.appendChild(button_file);

        // Компоновка элементов блока с вторичными данными
        block_details.appendChild(label_boss);
        block_details.appendChild(input_boss);

        block_details.appendChild(label_comp);
        block_details.appendChild(input_comp);

        block_details.appendChild(label_taxn);
        block_details.appendChild(input_taxn);

        block_details.appendChild(label_cntg);
        block_details.appendChild(input_cntg);

        block_details.appendChild(label_fadd);
        block_details.appendChild(input_fadd);

        block_details.appendChild(label_ladd);
        block_details.appendChild(input_ladd);

        block_details.appendChild(label_cntc);
        block_details.appendChild(input_cntc);

        // Компоновка элементов блока с технической информацией
        wrap_id.appendChild(label_id);
        wrap_id.appendChild(value_id);
        block_metadata.appendChild(wrap_id);

        block_metadata.appendChild(metadata_geolocation_divider);
        wrap_city.appendChild(label_city);
        wrap_city.appendChild(value_city);
        block_metadata.appendChild(wrap_city);


        block_metadata.appendChild(metadata_date_divider);
        wrap_regs.appendChild(label_regs);
        wrap_regs.appendChild(value_regs);
        block_metadata.appendChild(wrap_regs);

        wrap_supl.appendChild(label_supl);
        wrap_supl.appendChild(value_supl);
        block_metadata.appendChild(wrap_supl);

        block_metadata.appendChild(button_accept);
        block_metadata.appendChild(button_decline);

        // Компоновка всех колонок
        container.appendChild(block_info);
        container.appendChild(block_details);
        container.appendChild(block_metadata);

        html.add(container);

        if (i < suppliers.length) {
            // Это не последний элемент в списке

            // Инициализация разделителя (разобраться почему его надо генерировать заново - удаляется после add)
            let divider = document.createElement('div');
            divider.setAttribute('class', 'dropdown-divider mx-2 mb-2');

            // Добавить разделитель
            html.add(divider);
        }
    }

    // Возврат
    return html;
}

/**
 * Редактирование параметра
 *
 * @param {*} _key
 * @param {*} target
 * @param {*} value
 *
 * @returns
 */
function profile_panel_input_suppliers_requests_block_edit(_key, target, value) {
    $.ajax({
        url: `/${_key}/${target}/edit`,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            'value': value
        },
        success: page_profile_response_success,
        error: page_profile_response_error
    });

    return false;
}

/**
 * Регенерация параметра
 *
 * @param {*} _key
 * @param {*} target
 * @returns
 */
function profile_panel_input_suppliers_requests_block_regen(_key, target) {
    $.ajax({
        url: `/${_key}/${target}/regenerate`,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: (data, status, xhr) => {
            // Реинициализация списка
            page_profile_panel_input_suppliers_requests_init();

            return page_profile_response_success(data, status, xhr);
        },
        error: page_profile_response_error
    });

    return false;
}

/**
 * Подтверждение регистрации
 *
 * @param {*} _key
 * @param {*} target
 * @returns
 */
function profile_panel_input_suppliers_requests_block_accept(_key) {
    $.ajax({
        url: `/${_key}/accept`,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: (data, status, xhr) => {
            // Реинициализация списка
            page_profile_panel_input_suppliers_requests_init();

            return page_profile_response_success(data, status, xhr);
        },
        error: page_profile_response_error
    });

    return false;
}

/**
 * Отклонение регистрации
 *
 * @param {*} _key
 * @param {*} target
 * @returns
 */
function profile_panel_input_suppliers_requests_block_decline(_key, reason) {
    if (reason === undefined) {
        reason = prompt('Причина отказа', 'Недостаточно данных');
    }

    if (_key === undefined) {
        return false;
    }

    $.ajax({
        url: `/${_key}/decline`,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            reason
        },
        success: (data, status, xhr) => {
            // Реинициализация списка
            page_profile_panel_input_suppliers_requests_init();

            return page_profile_response_success(data, status, xhr);
        },
        error: page_profile_response_error
    });

    return false;
}

/**
 * Создание товара
 */
function profile_panel_input_suppliers_accounts_create_product(button, catn, prod) {
    if (catn === undefined || prod === undefined) return false;

    $.ajax({
        url: `/product/${prod}/${catn}/write`,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
        },
        success: (data, status, xhr) => {
            if (data.catn !== undefined) {
                // Реинициализация кнопки создания товара
                button.href = `/product/${prod}/${catn}`;
                button.onclick = null;
                button.classList.remove('icon_red');
                button.classList.add('text-dark');
                button.title = 'Товар создан';

                product_panel_connect(catn, prod, prompt('Подключить аналог (пусто - не подключать)'));
            }

            return page_profile_response_success(data, status, xhr);
        },
        error: page_profile_response_error
    });

    return false;
}

// Прочитать товары
function profile_panel_products_read(search = '@last', type = '@last', from = '@last', to = '@last', page = 1, purge = false) {
    // '@last' - оставить без изменений и взять данные из cookie

    // Реинициализация cookie с номером страницы
    Cookies.set('profile_panel_products_read_page', page, { path: window.location.pathname });

    if (search.length > 1) {
        // Проверка на длину запроса пройдена

        // Инициализация буфера с данными запроса
        let data = {
            '_csrf': yii.getCsrfToken(),
            search,
            from,
            to
        };

        // Запрос
        $.ajax({
            url: '/products/read/' + type + '/' + page,
            type: 'post',
            dataType: 'json',
            data: data,
            success: (data, status, xhr) => {
                if (data.products !== undefined) {
                    // Передан список

                    // Инициализация оболочки
                    let element = document.getElementById('profile_panel_input_products_wrap');

                    if (element !== null) {
                        // Найден элемент-оболочка

                        // Запись cookie с номером страницы
                        Cookies.set('profile_panel_products_read_page', parseInt(Cookies.get('profile_panel_products_read_page') ?? 1) + 1, { path: window.location.pathname });

                        if (purge || element.children.length === 0) {
                            // Не найдены строки, либо запрошена очистка

                            // Запись полученного содержимого
                            element.innerHTML = data.products;
                        } else {
                            // Найдены строки (подразумевается, что здесь могут быть только они)

                            // Запись полученного содержимого
                            element.innerHTML += data.products;
                        }

                        // Инициализация блокировщика
                        let block = false;

                        document.onscroll = function (e) {
                            // Обработчик события: "прокрутка экрана"

                            if (element.lastElementChild.getBoundingClientRect().y <= window.innerHeight) {
                                // Строка в области видимости окна

                                // Генерация и запись следующей страницы
                                if (!block) profile_panel_products_read('@last', 'all', '@last', '@last', parseInt(Cookies.get('profile_panel_products_read_page')));

                                // Блокировка
                                block = true;
                            }
                        };
                    }
                }

                return page_profile_response_success(data, status, xhr);
            },
            error: page_profile_response_error
        });
    };

    return false;
}

// Прочитать поставки
function profile_panel_supplies_read(page = 1, purge = false) {
    // Запрос
    $.ajax({
        url: '/supplies/read/' + page,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: (data, status, xhr) => {
            if (data.supplies !== undefined) {
                // Передан список

                // Инициализация оболочки
                let element = document.getElementById('profile_panel_input_supplies_wrap');

                if (element !== null) {
                    // Найден элемент-оболочка

                    // Запись cookie с номером страницы
                    Cookies.set('profile_panel_supplies_read_page', parseInt(Cookies.get('profile_panel_supplies_read_page') ?? 1) + 1, { path: window.location.pathname });


                    if (purge || element.children.length === 0) {
                        // Не найдены строки, либо запрошена очистка

                        // Запись полученного содержимого
                        element.innerHTML = data.supplies;
                    } else {
                        // Найдены строки (подразумевается, что здесь могут быть только они)

                        // Запись полученного содержимого
                        element.innerHTML += data.supplies;
                    }

                    // Инициализация блокировщика
                    let block = false;

                    document.onscroll = function (e) {
                        // Обработчик события: "прокрутка экрана"

                        if (element.lastElementChild.getBoundingClientRect().y <= window.innerHeight) {
                            // Строка в области видимости окна

                            // Генерация и запись следующей страницы
                            if (!block) profile_panel_supplies_read(parseInt(Cookies.get('profile_panel_supplies_read_page')));

                            // Блокировка
                            block = true;
                        }
                    };
                }
            }

            return page_profile_response_success(data, status, xhr);
        },
        error: page_profile_response_error
    });

    return false;
}

// Прочитать аккаунты
function profile_panel_accounts_read(page = 1, purge = false) {
    // Запрос
    $.ajax({
        url: '/accounts/read/' + page,
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: (data, status, xhr) => {
            if (data.accounts !== undefined) {
                // Передан список

                // Инициализация оболочки
                let element = document.getElementById('profile_panel_input_accounts_list');

                if (element !== null) {
                    // Найден элемент-оболочка

                    // Запись cookie с номером страницы
                    Cookies.set('profile_panel_accounts_read_page', parseInt(Cookies.get('profile_panel_accounts_read_page') ?? 1) + 1, { path: window.location.pathname });


                    if (purge || element.children.length === 0) {
                        // Не найдены строки, либо запрошена очистка

                        // Запись полученного содержимого
                        element.innerHTML = data.accounts;
                    } else {
                        // Найдены строки (подразумевается, что здесь могут быть только они)

                        // Запись полученного содержимого
                        element.innerHTML += data.accounts;
                    }

                    // Инициализация блокировщика
                    let block = false;

                    document.onscroll = function (e) {
                        // Обработчик события: "прокрутка экрана"

                        if (element.lastElementChild.getBoundingClientRect().y <= window.innerHeight) {
                            // Строка в области видимости окна

                            // Генерация и запись следующей страницы
                            if (!block) profile_panel_accounts_read(parseInt(Cookies.get('profile_panel_accounts_read_page')));

                            // Блокировка
                            block = true;
                        }
                    };
                }
            }

            return page_profile_response_success(data, status, xhr);
        },
        error: page_profile_response_error
    });

    return false;
}

// Запись (сброс) cookie с номером страницы
Cookies.set('page_profile_panel_input_suppliers_requests_init_page', 1, { path: '/profile/panel' });
Cookies.set('profile_panel_products_read_page', 1, { path: '/profile/panel' });
Cookies.set('profile_panel_supplies_read_page', 1, { path: '/profile/panel' });
Cookies.set('profile_panel_accounts_read_page', 1, { path: '/profile/panel' });

document.dispatchEvent(new CustomEvent("profile_panel.loaded"));
