function identification() {
    $.ajax({
        url: '/identification',
        type: 'post',
        dataType: 'json',
        data: { '_csrf': yii.getCsrfToken() },
        success: account_response_success,
        error: account_response_error
    });
};

document.addEventListener('DOMContentLoaded', identification(), true);

function authentication(form, target = 'main') {

    if (form == undefined) {
        form = {
            '_csrf': yii.getCsrfToken()
        };
    } else {
        form = $(form).serializeArray();
    }

    form.push(
        {
            name: 'type',
            value: 'authentication'
        },
        {
            name: 'target',
            value: target
        }
    );


    $.ajax({
        url: '/authentication',
        type: 'post',
        dataType: 'json',
        data: form,
        success: account_response_success,
        error: account_response_error
    });
};

function restore(form, target = 'main') {

    if (form == undefined) {
        form = {
            '_csrf': yii.getCsrfToken()
        };
    } else {
        form = $(form).serializeArray();
    }

    form.push(
        {
            name: 'type',
            value: 'restore'
        },
        {
            name: 'target',
            value: target
        }
    );

    $.ajax({
        url: '/restore',
        type: 'post',
        dataType: 'json',
        data: form,
        success: function (data, status, xhr) {
            if (data !== undefined) {
                // Получены данные с сервера

                // Панель
                if (typeof data.status === 'boolean') {
                    // Успешное выполнение

                    // Инициализация оболочки для уведомлений, оболочки для уведомлений и оболочки формы
                    let id, body, alert;

                    console.log(window.location.pathname);
                    console.log(window.location.pathname === '/authentication');

                    if (window.location.pathname === '/authentication') {
                        // Страница аутентификации

                        // Запись оболочки формы
                        body = document.getElementById('form_account');

                        // Запись оболочки для уведомлений
                        id = 'form_account_alert';

                        // Запись оболочки для уведомлений
                        alert = document.getElementById(id);
                    }
                    else {
                        // Панель аутентификации

                        // Запись оболочки формы
                        body = document.getElementById('form_account_panel');

                        // Запись идентификатора оболочки для уведомлений
                        id = 'form_account_panel_alert';

                        // Запись оболочки для уведомлений
                        alert = document.getElementById(id);
                    }

                    if (!(alert instanceof HTMLElement)) {
                        // Не найдена оболочка для уведомлений (подразумевается)

                        // Инициализация оболочки для уведомлений
                        const wrap = document.createElement('small');
                        wrap.classList.add('d-flex');
                        const element = document.createElement('small');
                        element.id = id;
                        element.classList.add('mx-auto');

                        // Запись в панель
                        wrap.appendChild(element);
                        body.appendChild(wrap);

                        // Реинициализация оболочки для уведомлений
                        alert = element;
                    }

                    if (data.status) {
                        // Отправлено сообщение

                        // Запись уведомления
                        alert.innerText = 'Сообщение отправлено на почту';
                    } else if (document.getElementById('accountform-mail').value === '') {
                        // Пустое содержимое почты

                        // Запись уведомления
                        alert.innerText = 'Введите почту';

                        // Удаление ненужных полей
                        document.getElementById('accountform-pswd').parentElement.remove();
                        panel.querySelector('[name="submitAuthentication"]').parentElement.remove();
                        panel.querySelector('[name="submitRegistration"]').remove();
                    } else {
                        // Не удалось отправить сообщение

                        // Запись уведомления
                        alert.innerText = 'Ошибка при отправке сообщения';
                    }

                    alert.innerText = data.status ? 'Сообщение отправлено на почту' : 'Введите почту';
                }
            }
            account_response_success(data, status, xhr);
        },
        error: account_response_error
    });
};

function deauthentication() {
    $.ajax({
        url: '/deauthentication',
        type: 'post',
        dataType: 'json',
        data: { '_csrf': yii.getCsrfToken() },
        success: account_response_success,
        error: account_response_error
    });
};

function registration_start(form, target = 'main') {
    // // Инициализация постфикса
    // let postfix = '';

    // if (target === 'panel') {
    //     postfix = '-panel';
    // }

    // Удаление кнопок аутентификации
    form.children[4].remove();

    // Инициализация поля ввода почты
    let mail = form.children[2];

    // // Инициализация поля ввода пароля
    // let password = form.children[3];

    // Инициализация кнопки регистрации
    let registration = form.children[4];

    // Изменение отступа поля
    mail.classList.add('mb-4');

    // // Изменение стиля
    // password.classList.add('mb-2');

    // Удаление поля ввода пароля
    form.children[3].remove();

    // Изменение размера кнопки регистрации
    registration.classList.remove('btn-sm');
    registration.classList.add('btn');


    // Изменение вызываемой функции
    registration.setAttribute('onclick', 'return registration_end(this.parentElement, \'' + target + '\');');

    // // Инициализация оболочки поля повтора пароля
    // let password_repeat_wrap = document.createElement('div');
    // password_repeat_wrap.setAttribute('class', 'mb-3 field-accountform-rept required');

    // // Инициализация поля повтора пароля
    // let password_repeat = document.createElement('input');
    // password_repeat.setAttribute('id', 'accountform-rept' + postfix);
    // password_repeat.classList.add('form-control');
    // password_repeat.setAttribute('type', 'password');
    // password_repeat.setAttribute('name', 'AccountForm[rept]');
    // password_repeat.setAttribute('placeholder', 'Повтор пароля');
    // password_repeat.setAttribute('aria-required', 'true');
    // password_repeat.setAttribute('aria-invalid', 'true');

    // // Инициализация элемента с текстом ошибок поля повтора пароля
    // let password_repeat_errors = document.createElement('p');
    // password_repeat_errors.setAttribute('class', 'help-block help-block-error small');

    // // Инициализация оболочки элемента с подтверждением политики персональных данных
    // let private_policy_wrap = document.createElement('div');
    // private_policy_wrap.setAttribute('class', 'mb-3 field-accountform-pols required');

    // // Инициализация оболочки для класса checkbox для элемента с подтверждением политики персональных данных
    // let private_policy_checkbox = document.createElement('div');
    // private_policy_checkbox.classList.add('checkbox');
    // private_policy_checkbox.classList.add('text-center');

    // // Инициализация оболочки для класса label для элемента с подтверждением политики персональных данных
    // let private_policy_label = document.createElement('label');
    // private_policy_label.setAttribute('for', 'accountform-pols');

    // // Инициализация скрытого элемента с подтверждением политики персональных данных
    // let private_policy_hidden = document.createElement('input');
    // private_policy_hidden.setAttribute('type', 'hidden');
    // private_policy_hidden.setAttribute('name', 'AccountForm[pols]');
    // private_policy_hidden.setAttribute('value', '0');

    // // Инициализация элемента с подтверждением политики персональных данных
    // let private_policy = document.createElement('input');
    // private_policy.setAttribute('id', 'accountform-pols' + postfix);
    // private_policy.setAttribute('type', 'checkbox');
    // private_policy.setAttribute('name', 'AccountForm[pols]');
    // private_policy.setAttribute('placeholder', 'Политика конфиденциальности');

    // // Инициализация оболочки элемента с текстом элемента с подтверждением политики персональных данных
    // let private_policy_text_wrap = document.createElement('small');
    // private_policy_text_wrap.setAttribute('class', 'ml-2');

    // // Инициализация элемента с текстом элемента с подтверждением политики персональных данных
    // let private_policy_text = document.createElement('a');
    // private_policy_text.setAttribute('href', '/policy');
    // private_policy_text.innerText = 'Политика';

    // // Запись в документ
    // form.insertBefore(password_repeat_wrap, registration);
    // password_repeat_wrap.appendChild(password_repeat);
    // password_repeat_wrap.appendChild(password_repeat_errors);
    // form.insertBefore(private_policy_wrap, registration);
    // private_policy_wrap.appendChild(private_policy_checkbox);
    // private_policy_checkbox.appendChild(private_policy_label);
    // private_policy_label.appendChild(private_policy);
    // private_policy_label.appendChild(private_policy_text_wrap);
    // private_policy_text_wrap.appendChild(private_policy_text);
    // private_policy_text_wrap.appendChild(document.createTextNode(' конфиденциальности'));

    // Инициализация заголовка
    let title = form.children[1];

    // Обновление заголовка
    title.innerText = 'Регистрация';

    // Подключение к ActiveForm
    $(form).yiiActiveForm('add', {
        id: 'accountform-rept',
        name: 'rept',
        container: '.field-accountform-rept',
        input: '#accountform-rept',
        error: '.help-block.help-block-error.small',
        enableAjaxValidation: true
    });

    // Подключение к ActiveForm
    $(form).yiiActiveForm('add', {
        id: 'accountform-pols',
        name: 'pols',
        container: '.field-accountform-pols',
        input: '#accountform-pols',
        enableAjaxValidation: true
    });

    // Обновление валидатора
    $(form).yiiActiveForm('data').settings.validationUrl = '/registration';

    return false;
};

function registration_end(form, target = 'main') {
    // Инициализация
    $(form).yiiActiveForm('init');

    // Проверка
    $(form).yiiActiveForm('validate', true);

    if (form == undefined) {
        form = {
            '_csrf': yii.getCsrfToken()
        };
    } else {
        form = $(form).serializeArray();
    }

    form.push(
        {
            name: 'type',
            value: 'registration'
        },
        {
            name: 'target',
            value: target
        });

    $.ajax({
        url: '/registration',
        type: 'post',
        dataType: 'json',
        data: form,
        success: account_response_success,
        error: account_response_error
    });

    return false;
};

function authentication_auto_button_status_switch(button) {
    if (button !== undefined) {
        if (button.classList.contains('active')) {
            // Кнопка в статусе "Запомнить вход"

            // Замена иконки
            button.children[0].classList.replace('fa-lock', 'fa-unlock');

            return true;
        } else {
            // Кнопка в статусе "Не запоминать вход"


            // Замена иконки
            button.children[0].classList.replace('fa-unlock', 'fa-lock');

            return true;
        };
    };

    return false;
};

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

    // // Разобраться нужна ли ещё првоерка на page_index, избавиться от неё
    // if (data.main !== undefined && document.getElementById('page_index') === null) {
    //     main = document.getElementsByTagName('main')[0];

    //     // Обновление документа
    //     main.innerHTML = data.main;

    //     // Реинициализация
    //     reinitialization(main);
    // }

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

        // Панель
        if (data.panel !== undefined) {
            // Данные с панелью переданы

            // Инициализация
            let panel = document.getElementById('menu_auth_panel');

            if (panel !== null) {
                // Панель инициализирована

                // Обновление документа
                panel.innerHTML = data.panel;

                // Реинициализация
                reinitialization(panel);
            }
        }

        // Меню
        if (data.menu !== undefined) {
            // Данные с меню переданы

            // Инициализация
            let menu = document.getElementsByTagName('menu')[0];

            // Обновление документа
            menu.innerHTML = data.menu;

            // Реинициализация
            reinitialization(menu);
        }
    }

    main_response(data, status, xhr);
}

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

    account_response(data, status, xhr);

    // Реинициализация панели поиска
    // Перенести в отдельный файл который подгружается в зависимости от настроек
    // search_panel_show();

    // // Обновление панели поиска
    product_search();

}

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

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

    account_response(data, status, xhr);
}
