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

        if (panel !== undefined) {
            form.panel = panel;
        };
    } else {
        form = new FormData(form);

        if (panel !== undefined) {
            form.append('panel', panel);
        };
    };

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

    return false;
};

function page_profile_supplies_import_excel(form, warehouse, account, panel) {
    function send(help = false) {
        if (form === undefined) {
            form = {
                '_csrf': yii.getCsrfToken()
            };

            form.help = +help;

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

            if (warehouse !== undefined) {
                form.warehouse = warehouse;
            };

            if (account !== undefined) {
                form.account = account;
            };
        } else {
            form = new FormData(form);

            form.append('help', +help);

            if (panel !== undefined) {
                form.append('panel', panel);
            };

            if (warehouse !== undefined) {
                form.append('warehouse', warehouse);
            };

            if (account !== undefined) {
                form.append('account', account);
            };
        };

        $.ajax({
            url: '/profile/import',
            type: 'post',
            dataType: 'json',
            processData: false,
            contentType: false,
            data: form,
            success: page_profile_response_success,
            error: page_profile_response_error
        });
    }

    if (confirm('Отправить документ на сервер? (убедитесь, что настроили согласно инструкции)')) send();
    else if (confirm('Отправить документ модераторам? (мы можем настроить его сами)')) send(true);

    return false;
};

function page_profile_imports_delete(_key) {
    if (confirm(`Удалить инстанцию поставок ${_key}?`)) {
        $.ajax({
            url: '/profile/imports/delete',
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                _key
            },
            success: page_profile_response_success,
            error: page_profile_response_error
        });

        return false;
    }

    return true;
};

function page_profile_warehouses_write() {
    $.ajax({
        url: '/profile/warehouses/write',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: page_profile_response_success,
        error: page_profile_response_error
    });

    return false;
};

function page_profile_warehouses_open(element, _key, name) {
    if (confirm(`Открыть склад "${name}"?`)) {
        $.ajax({
            url: '/profile/warehouses/open',
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                _key
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.opened !== undefined && data.opened == true) {
                        // Получена информации об успешном открытии склала

                        // Перезапись иконки
                        element.classList.remove('fa-lock');
                        element.classList.add('fa-lock-open');

                        // Перезапись вызываемой функции
                        element.removeAttribute('onclick');
                        element.setAttribute('onclick', 'return page_profile_warehouses_close(this, ' + _key + ', \'' + element.parentElement.parentElement.parentElement.children[0].children[0].textContent + '\');"');

                        // Перезапись всплывающей подсказки
                        element.title = 'Закрыть';
                    }
                }

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

        return false;
    }

    return true;
};

function page_profile_warehouses_close(element, _key, name) {
    if (confirm(`Закрыть склад "${name}"?`)) {
        $.ajax({
            url: '/profile/warehouses/close',
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                _key
            },
            success: function (data, status, xhr) {
                if (data !== undefined) {
                    // Получены данные с сервера

                    if (data.closed !== undefined && data.closed == true) {
                        // Получена информации об успешном открытии склала

                        // Перезапись иконки
                        element.classList.remove('fa-lock-open');
                        element.classList.add('fa-lock');

                        // Перезапись вызываемой функции
                        element.removeAttribute('onclick');
                        element.setAttribute('onclick', 'return page_profile_warehouses_open(this, ' + _key + ', \'' + element.parentElement.parentElement.parentElement.children[0].children[0].textContent + '\');"');

                        // Перезапись всплывающей подсказки
                        element.title = 'Открыть';
                    }
                }

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

        return false;
    }

    return true;
};

function page_profile_warehouses_delete(_key, name) {
    if (confirm(`Удалить склад "${name}"?`)) {
        $.ajax({
            url: '/profile/warehouses/delete',
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                _key
            },
            success: page_profile_response_success,
            error: page_profile_response_error
        });

        return false;
    }

    return true;
};

function page_profile_warehouses_rename(_key, name) {
    $.ajax({
        url: '/profile/warehouses/rename',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            _key,
            name
        },
        success: page_profile_response_success,
        error: page_profile_response_error
    });

    return false;
};

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

        if (warehouse !== undefined) {
            form._key = warehouse;
        };

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

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

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

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

    // Реинициализация
    initDropdownOem();

    return false;
};

function page_profile_settings(form, panel, redirect = '/profile') {
    if (form == undefined) {
        form = {
            '_csrf': yii.getCsrfToken()
        };

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

        form.redirect = redirect;
    } else {
        form = $(form).serializeArray();

        if (panel !== undefined) {
            form.push({
                name: "panel",
                value: panel
            });
        };

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

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

    // Реинициализация
    initDropdownOem();

    return false;
};

function page_profile_monitoring(change = 1, panel) {
    // Инициализация
    let url = new URL(document.location);
    let search = url.searchParams.get('search');

    if (search === null) {
        search = 1;
    } else {
        search = +search + change;
    };

    // Предобработка
    url.searchParams.set('search', search);

    $.ajax({
        url: '/profile/monitoring',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            'search': search,
            'panel': panel
        },
        success: function (data, status, xhr) {
            // Ренициализация
            let url = new URL(document.location);

            // Запись параметра в URL
            url.searchParams.set('search', data.search);

            // Запись в историю
            history.pushState('', document.title, url.toString());

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

    return false;
};


function page_profile_response(data, status, xhr) {
    // Обработка ответов

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

        // Активная панель
        if (data.panel_selected !== undefined) {
            // Активация
            document.getElementById(data.panel_selected).click();
        };
    };

    main_response(data, status, xhr);
};

function page_profile_response_success(data, status, xhr) {
    // Обработка ответов от удавшихся запросов

    page_profile_response(data, status, xhr);
};

function page_profile_response_error(data, status, xhr) {
    // Обработка ответов от неудавшихся запросов

    // Инициализация
    data = data.responseJSON;

    page_profile_response(data, status, xhr);
};

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