function order_init(order) {
    // Инициализация панели
    const panel = document.getElementById(order + '_panel');

    // Инициализация кнопки
    const button = document.getElementById(order + '_button');

    let supplies_are_confirmed = true;

    for (let i = 0; i <= panel.children[2].children[0].children.length - 1; i++) {
        // Инициализация
        const target = panel.children[2].children[0].children[i];

        if ((target === undefined || target.children[1] === undefined || target.children[1].children[0] === undefined) && !target.classList.contains('dropdown-divider')) {

            supplies_are_confirmed = false;
        };
    };

    if (supplies_are_confirmed) {

        button.classList.remove('disabled');
    };

    return false;
};

/**
 * Инициализация списка
 *
 * @param {number} amount
 * @param {number} page
 * @returns
 */
function order_init_list(amount, page, id = 'orders_panel_moderation_list') {
    if (typeof amount === 'number' && typeof page === 'number' && typeof id === 'string') {
        $.ajax({
            url: `/orders/list/${page}`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                amount
            },
            success: (data, status, xhr) => {
                // Обработка ответа

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

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

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

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

                        // Запись в документ
                        wrap.innerHTML += data.list;

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

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

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

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

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

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

        return false;
    };

    return true;
}

function order_accept(order) {
    $.ajax({
        url: 'orders/' + order + '/accept',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: orders_response_success,
        error: orders_response_error
    });

    return false;
};

function orders_supply_edit(order, prod, catn, delivery) {
    if (typeof order === 'string' && typeof prod === 'string' && typeof catn === 'string' && typeof delivery === 'string') {
        // Получены входные параметры

        // Инициализация
        const supply = document.getElementById(`${order}_${prod}_${catn}_${delivery}_supply`);

        // Поиск панели для вывода информации
        const panel = document.getElementById('orders_panel_edit_' + order);

        // Поиск всех кнопок с поставками
        const rows = document.getElementsByClassName('row_supply');

        // Деактивация остальных кнопок
        for (let i = 0; i < rows.length; i++) {
            if (rows[i].parentElement.getAttribute('id') === 'orders_panel_supplies_' + order) {
                // Если это кнопка конкретно с этого заказа

                rows[i].classList.remove('row_supply_active');
            };
        };

        // Активация выбранной кнопки
        supply.classList.add('row_supply_active');

        // Запись индикатора загрузки
        panel.innerHTML = '<p class="my-auto">Загрузка</p>';

        $.ajax({
            url: `orders/supply/${order}/${prod}/${catn}/${delivery}/read`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken()
            },
            success: function (data, status, xhr) {
                // Удаление индикатора загрузки
                panel.innerHTML = '';

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

                    // Идентификатор
                    if (typeof data.id !== 'undefined' && document.getElementById(supply.getAttribute('id') + '_id') === null) {
                        // Инициализация контейнера
                        const container = document.createElement('div');
                        container.setAttribute('id', supply.getAttribute('id') + '_id');
                        container.setAttribute('class', 'row px-3');

                        // Инициализация названия
                        const name = document.createElement('p');
                        name.setAttribute('id', supply.getAttribute('id') + '_id_name');
                        name.setAttribute('class', 'col-auto px-0 ml-0 mr-2');
                        name.innerText = 'Идентификатор:';

                        // Инициализация идентификатора
                        const text = document.createElement('p');
                        text.setAttribute('id', supply.getAttribute('id') + '_id_value');
                        text.setAttribute('class', 'col-auto px-0 mr-0 font-weight-bold');
                        if (data.id !== undefined) {
                            text.innerText = '#' + data.id;
                        } else {
                            text.innerText = 'Неизвестно';
                        };

                        // Запись в документ
                        panel.appendChild(container);
                        container.appendChild(name);
                        container.appendChild(text);
                    };

                    // Разделитель статического информационного блока от блока с динамическими данными
                    if (document.getElementById(supply.getAttribute('id') + '_info_divider') === null) {
                        // Инициализация контейнера
                        let divider = document.createElement('div');
                        divider.setAttribute('id', supply.getAttribute('id') + '_info_divider');
                        divider.setAttribute('class', 'dropdown-divider mb-2');

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

                    // Цена
                    if (typeof data.cost !== 'undefined' && document.getElementById(supply.getAttribute('id') + '_cost') === null) {
                        // Инициализация контейнера
                        const container = document.createElement('div');
                        container.setAttribute('id', supply.getAttribute('id') + '_cost');
                        container.setAttribute('class', 'row px-3');

                        // Инициализация названия
                        const name = document.createElement('p');
                        name.setAttribute('id', supply.getAttribute('id') + '_cost_name');
                        name.setAttribute('class', 'col-auto px-0 ml-0 mr-2');
                        name.innerText = 'Цена:';

                        // Инициализация поля
                        const input = document.createElement('input');
                        input.setAttribute('id', supply.getAttribute('id') + '_cost_input');
                        input.setAttribute('class', 'col-2 ml-auto text-center form-control-plaintext');
                        input.setAttribute('type', 'number');
                        input.setAttribute('onblur', `return orders_supply_cost_edit('${order}', '${prod}', '${catn}', '${delivery}', this);`);
                        if (data.cost !== undefined) {
                            input.setAttribute('value', data.cost);
                        } else {
                            input.setAttribute('value', 0);
                        };
                        input.setAttribute('aria-invalid', 'false');
                        input.setAttribute('data-old-value', input.value);

                        // Инициализация дополнительных данных
                        const info = document.createElement('p');
                        info.setAttribute('class', 'col-auto px-0 ml-2 mr-0');
                        info.innerText = 'рублей';

                        // Запись в документ
                        panel.appendChild(container);
                        container.appendChild(name);
                        container.appendChild(input);
                        container.appendChild(info);
                    };

                    // Время доставки
                    if (typeof data.time !== 'undefined' && document.getElementById(supply.getAttribute('id') + '_time') === null) {
                        // Инициализация контейнера
                        const container = document.createElement('div');
                        container.setAttribute('id', supply.getAttribute('id') + '_time');
                        container.setAttribute('class', 'row px-3 pb-1');

                        // Инициализация названия
                        const name = document.createElement('p');
                        name.setAttribute('id', supply.getAttribute('id') + '_time_name');
                        name.setAttribute('class', 'col-auto px-0 ml-0 mr-2');
                        name.innerText = 'Доставка:';

                        // Инициализация поля
                        const input = document.createElement('input');
                        input.setAttribute('id', supply.getAttribute('id') + '_time_input');
                        input.setAttribute('class', 'col-2 ml-auto text-center form-control-plaintext');
                        input.setAttribute('type', 'number');
                        input.setAttribute('onblur', `return orders_supply_time_edit('${order}', '${prod}', '${catn}', '${delivery}', this);`)
                        if (data.time !== undefined) {
                            input.setAttribute('value', data.time);
                        } else {
                            input.setAttribute('value', 0);
                        };
                        input.setAttribute('aria-invalid', 'false');
                        input.setAttribute('data-old-value', input.value);

                        // Инициализация дополнительных данных
                        const info = document.createElement('p');
                        info.setAttribute('class', 'col-auto px-0 ml-2 mr-0');
                        info.innerText = 'дней (+1)';

                        // Запись в документ
                        panel.appendChild(container);
                        container.appendChild(name);
                        container.appendChild(input);
                        container.appendChild(info);
                    };

                    // Количество
                    if (typeof data.amnt !== 'undefined' && document.getElementById(supply.getAttribute('id') + '_amnt') === null) {
                        // Инициализация контейнера
                        const container = document.createElement('div');
                        container.setAttribute('id', supply.getAttribute('id') + '_amnt');
                        container.setAttribute('class', 'row mb-2 px-3');

                        // Инициализация названия
                        const name = document.createElement('p');
                        name.setAttribute('id', supply.getAttribute('id') + '_amnt_name');
                        name.setAttribute('class', 'col-auto px-0 ml-0 mr-2');
                        name.innerText = 'Количество:';

                        // Инициализация поля
                        const input = document.createElement('input');
                        input.setAttribute('id', supply.getAttribute('id') + '_amnt_input');
                        input.setAttribute('class', 'col-2 ml-auto text-center form-control-plaintext');
                        input.setAttribute('type', 'number');
                        input.setAttribute('onblur', `return orders_supply_amnt_edit('${order}', '${prod}', '${catn}', '${delivery}', this);`)
                        if (data.amnt !== undefined) {
                            input.setAttribute('value', data.amnt);
                        } else {
                            input.setAttribute('value', 0);
                        };
                        input.setAttribute('aria-invalid', 'false');
                        input.setAttribute('data-old-value', input.value);

                        // Инициализация дополнительных данных
                        const info = document.createElement('p');
                        info.setAttribute('class', 'col-auto px-0 ml-2 mr-0');
                        info.innerText = 'шт';

                        // Запись в документ
                        panel.appendChild(container);
                        container.appendChild(name);
                        container.appendChild(input);
                        container.appendChild(info);
                    };

                    // Статус
                    if (typeof data.stts !== 'undefined' && document.getElementById(supply.getAttribute('id') + '_status') === null) {
                        // Инициализация контейнера
                        const container = document.createElement('div');
                        container.setAttribute('id', supply.getAttribute('id') + '_status');
                        container.setAttribute('class', 'row mb-2 px-3');

                        // Инициализация поля
                        const select = document.createElement('select');
                        select.setAttribute('id', supply.getAttribute('id') + '_status_select');
                        select.setAttribute('class', 'form-control');
                        select.setAttribute('onchange', `return orders_supply_status_edit('${order}', '${prod}', '${catn}', '${delivery}', this);`)
                        select.setAttribute('data-old-value', select.value);

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

                        const options = {
                            processing: 'Обрабатывается',
                            requested: 'Запрошен',
                            accepted: 'Ожидается отправка',
                            going: 'Доставляется',
                            received: 'Получено'
                        }

                        for (const name in options) {
                            // Перебор параметров

                            // Инициализация параметра
                            const option = document.createElement('option');
                            option.value = name;
                            option.innerText = options[name];

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

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

                        // Выбор активного параметра
                        if (typeof data.stts === 'string') {
                            select.value = data.stts;
                        } else {
                            input.value = 0;
                        };
                    };

                    // Комментарий
                    if (typeof data.comm !== 'undefined' && document.getElementById(supply.getAttribute('id') + '_comm') === null) {
                        // Инициализация контейнера
                        const container = document.createElement('div');
                        container.setAttribute('id', supply.getAttribute('id') + '_comm');
                        container.setAttribute('class', 'row mb-2 px-3');

                        // Инициализация поля
                        const textarea = document.createElement('textarea');
                        textarea.setAttribute('id', supply.getAttribute('id') + '_comm_input');
                        textarea.setAttribute('class', 'col-12 form-control');
                        textarea.setAttribute('cols', '50');
                        textarea.setAttribute('rows', '3');
                        textarea.setAttribute('onblur', `return orders_supply_comm_edit('${order}', '${prod}', '${catn}', '${delivery}', this);`)
                        if (typeof data.comm === 'string') textarea.value = data.comm;
                        textarea.setAttribute('placeholder', 'Комментарий к поставке (для покупателя)')
                        textarea.setAttribute('data-old-value', textarea.value);

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

                    const small = document.createElement('small');
                    small.setAttribute('class', 'text-center');

                    const b = document.createElement('b');
                    b.innerText = 'Покупатель будет уведомлён при изменении параметров';

                    small.appendChild(b);
                    panel.appendChild(small);
                };

                orders_response_success(data, status, xhr);
            },
            error: orders_response_error
        });
    }

    return false;
};

/**
 * Изменить комментарий к поставке заказа
 *
 * @param {*} order
 * @param {*} prod
 * @param {*} catn
 * @param {*} delivery
 * @param {*} element
 * @returns
 */
function orders_supply_comm_edit(order, prod, catn, delivery, element) {
    if (typeof order === 'string' && typeof prod === 'string' && typeof catn === 'string' && typeof delivery === 'string' && typeof element === 'object') {
        // Получены входные параметры

        // Проверка на наличие изменений
        if (element.value === element.getAttribute('data-old-value')) return false;

        $.ajax({
            url: `orders/supply/${order}/${prod}/${catn}/${delivery}/edit/comm`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'comm': element.value
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.comm !== undefined) {
                        // Получен комментарий

                        // Реинициализация параметра
                        element.value = data.comm;

                        // Запись метаданных
                        element.setAttribute('data-old-value', data.comm);
                    };
                };

                orders_response_success(data, status, xhr);
            },
            error: orders_response_error
        });
    };


    return false;
};

/**
 * Изменить цену поставки в заказе
 */
function orders_supply_cost_edit(order, prod, catn, delivery, element) {
    if (typeof order === 'string' && typeof prod === 'string' && typeof catn === 'string' && typeof delivery === 'string' && typeof element === 'object') {
        // Получены входные параметры

        // Проверка на наличие изменений
        if (element.value === element.getAttribute('data-old-value')) return false;

        $.ajax({
            url: `orders/supply/${order}/${prod}/${catn}/${delivery}/edit/cost`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'cost': element.value
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.cost !== undefined) {
                        // Получена цена

                        // Реинициализация параметра
                        element.value = data.cost;

                        // Запись метаданных
                        element.setAttribute('data-old-value', data.cost);
                    };
                };

                orders_response_success(data, status, xhr);
            },
            error: orders_response_error
        });
    };

    return false;
};

/**
 * Изменить время доставки товара в заказе
 */
function orders_supply_time_edit(order, prod, catn, delivery, element) {
    if (typeof order === 'string' && typeof prod === 'string' && typeof catn === 'string' && typeof delivery === 'string' && typeof element === 'object') {
        // Получены входные параметры

        // Проверка на наличие изменений
        if (element.value === element.getAttribute('data-old-value')) return false;

        $.ajax({
            url: `orders/supply/${order}/${prod}/${catn}/${delivery}/edit/time`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'time': element.value
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.time !== undefined) {
                        // Получено время

                        // Реинициализация параметра
                        element.value = data.time;

                        // Запись метаданных
                        element.setAttribute('data-old-value', data.time);
                    };
                };

                orders_response_success(data, status, xhr);
            },
            error: orders_response_error
        });
    };

    return false;
};

/**
 * Изменить количество товара в заказе
 */
function orders_supply_amnt_edit(order, prod, catn, delivery, element) {
    if (typeof order === 'string' && typeof prod === 'string' && typeof catn === 'string' && typeof delivery === 'string' && typeof element === 'object') {
        // Получены входные параметры

        // Проверка на наличие изменений
        if (element.value === element.getAttribute('data-old-value')) return false;

        $.ajax({
            url: `orders/supply/${order}/${prod}/${catn}/${delivery}/edit/amnt`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'amnt': element.value
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.amnt !== undefined) {
                        // Получено время

                        // Реинициализация параметра
                        element.value = data.amnt;

                        // Запись метаданных
                        element.setAttribute('data-old-value', data.amnt);
                    };
                };

                orders_response_success(data, status, xhr);
            },
            error: orders_response_error
        });
    };

    return false;
};

/**
 * Изменить время доставки товара в заказе
 */
function orders_status_edit(order, element) {
    if (typeof order === 'string' && typeof element === 'object') {
        // Получены входные параметры

        // Проверка на наличие изменений
        if (element.value === element.getAttribute('data-old-value')) return false;

        $.ajax({
            url: `/orders/${order}/edit/stts`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'stts': element.value
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.stts !== undefined) {
                        // Получен статус

                        // Реинициализация параметра
                        element.value = data.stts;

                        // Запись метаданных
                        element.setAttribute('data-old-value', data.stts);
                    };
                };

                orders_response_success(data, status, xhr);
            },
            error: orders_response_error
        });
    };


    return false;
};

/**
 * Изменить время доставки товара в заказе
 */
function orders_supply_status_edit(order, prod, catn, delivery, element) {
    if (typeof order === 'string' && typeof prod === 'string' && typeof catn === 'string' && typeof delivery === 'string' && typeof element === 'object') {
        // Получены входные параметры

        // Проверка на наличие изменений
        if (element.value === element.getAttribute('data-old-value')) return false;

        $.ajax({
            url: `orders/supply/${order}/${prod}/${catn}/${delivery}/edit/stts`,
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'stts': element.value
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.stts !== undefined) {
                        // Получен статус

                        // Реинициализация параметра
                        element.value = data.stts;

                        // Запись метаданных
                        element.setAttribute('data-old-value', data.stts);
                    };
                };

                orders_response_success(data, status, xhr);
            },
            error: orders_response_error
        });
    };


    return false;
};

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

// Вызов события: "loaded"
document.dispatchEvent(new CustomEvent("orders_panel.loaded"));
