/**
 * Записать в корзину (создать корзину, если не существует)
 */
function cart_write(supply_id, delivery_type, amount = 1) {
    // Инициализация
    let data = {};
    data['supply_id'] = supply_id;
    data['amount'] = amount;
    data['delivery_type'] = delivery_type;
    data['_csrf'] = yii.getCsrfToken();

    $.ajax({
        url: '/order/write',
        type: 'post',
        dataType: 'json',
        data: data,
        success: cart_response_success,
        error: cart_response_error
    });

    // Пересчет количества товаров в корзине для кнопки в меню
    setTimeout(cart_count, 500);

    return false;
};

/**
 * Удалить корзину
 */
function cart_delete() {
    $.ajax({
        url: '/order/delete',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: cart_response_success,
        error: cart_response_error
    });

    // Пересчет количества товаров в корзине для кнопки в меню
    setTimeout(cart_count, 500);

    return false;
};

/**
 * Сформировать заказ
 */
function cart_request() {
    $.ajax({
        url: '/order/request',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken()
        },
        success: cart_response_success,
        error: cart_response_error
    });

    // Пересчет количества товаров в корзине для кнопки в меню
    setTimeout(cart_count, 500);

    return false;
};

/**
 * Управление чекбоксами
 */
function cart_list_checkbox(target) {
    // Инициализация
    let elements = document.getElementsByClassName('cart_list_target');
    let reg = /^\w+_([^_]*)$/;
    let catn = reg.exec(target.id)[1];

    if (catn === 'all') {
        if (target.checked === true) {
            for ($i = 0; $i < elements.length; $i++) {
                // Перебор всех выбранных элементов

                elements[$i].getElementsByTagName('input')[0].checked = true;
            };

            target.checked = true;
        } else {
            for ($i = 0; $i < elements.length; $i++) {
                // Перебор всех выбранных элементов

                elements[$i].getElementsByTagName('input')[0].checked = false;
            };

            target.checked = false;
        };

        return false;
    };
};

/**
 * Удалить из корзины
 */
function cart_list_delete(target, amount = 0) {
    // Инициализация
    let targets = {};

    if (target !== undefined) {
        // Обработка входных параметров

        targets[target] = amount;
    } else {
        // Обработка выбранных элементов в списке

        // Инициализация
        let elements = document.getElementsByClassName('cart_list_target');
        let reg = /^\w+_([^_]*)$/;

        for ($i = 0; $i < elements.length; $i++) {
            // Перебор всех выбранных элементов

            // Инициализация
            let checkbox = elements[$i].getElementsByTagName('input')[0];

            if (checkbox.checked === true) {
                targets[reg.exec(checkbox.id)[1]] = 0;
            };
        };
    };

    $.ajax({
        url: '/order/delete',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            'targets': targets
        },
        success: cart_response_success,
        error: cart_response_error
    });

    // Реинициализация
    document.getElementById('cart_list_action').value = 'none';

    // Пересчет количества товаров в корзине для кнопки в меню
    setTimeout(cart_count, 500);

    // Пересчитывание стоимости
    cart_cost_calculate();

    return false;
};

/**
 * Изменить количество товара в корзине
 */
function cart_list_amount_update(target, type, input) {
    if (target !== undefined && target !== null && type !== undefined && type !== null && input !== undefined && input !== null) {
        // Обработка входных параметров

        // Инициализация
        let targets = {};
        targets[target] = {};
        targets[target][type] = input.value;

        $.ajax({
            url: '/order/amount-update',
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'targets': targets
            },
            success: cart_response_success,
            error: cart_response_error
        });

        // Пересчет количества товаров в корзине для кнопки в меню
        setTimeout(cart_count, 500);

        // Пересчитывание стоимости
        cart_cost_calculate();
    };

    return false;
};

/**
 * Подсчёт стоимости
 */
function cart_cost_calculate() {
    let elements = document.getElementsByClassName('cart_list_target');
    let reg = /^([0-9]*)\s*\w*/;
    let costs = 0;

    for ($i = 0; $i < elements.length; $i++) {
        let cost = elements[$i].getElementsByTagName('div')[7].innerText;
        let amount = elements[$i].getElementsByTagName('div')[5].children[0].value;

        costs += +reg.exec(cost)[1] * amount;
    };

    document.getElementById('cart_cost').innerHTML = costs;
};

/**
 * Изменить количество товара в корзине
 */
function cart_list_comment_edit(catn, type, element) {
    if (catn !== undefined && catn !== null && type !== undefined && type !== null && element !== undefined && element !== null) {
        // Инициализация textarea
        element.innerHTML = '<textarea id="' + element.id + '-textarea" class="mb-1 form-control" cols="50" rows="5" maxlength="300" onchange="return cart_list_comment_save(\'' + catn + '\', \'' + type + '\', this.parentElement)">' + element.innerText + '</textarea>';

        element.removeAttribute('onclick');

        // Инициализация счетчика
        let counter = document.createElement('p');

        counter.setAttribute('id', element.id + '-textarea-counter');
        counter.setAttribute('class', "text-right");

        // Инициализация значения текущего количества символов
        let counter_current = document.createElement('span');

        counter_current.setAttribute('id', element.id + '-textarea-counter-current');
        counter_current.innerText = document.getElementById(element.id + '-textarea').value.length;

        // Инициализация разделителя между текущим и максимальным значениями
        let counter_delimiter = document.createElement('span');

        counter_delimiter.innerText = ' / ';

        // Инициализация значения максиального количества символов
        let counter_maximum = document.createElement('span');

        counter_maximum.setAttribute('id', element.id + '-textarea-counter-maximum');
        counter_maximum.innerText = 300;

        // Формирование счетчика
        counter.append(counter_current);
        counter.append(counter_delimiter);
        counter.append(counter_maximum);

        // Запись счетчика после textarea
        element.after(counter);

        // Инициализация счетчика
        initTextarea(
            '#' + element.id + '-textarea',
            '#' + counter_current.id,
            '#' + counter_maximum.id,
            function () {
                let textarea = document.getElementById(element.id + '-textarea');

                textarea.removeAttribute('onchange');
            },
            function () {
                let textarea = document.getElementById(element.id + '-textarea');

                textarea.setAttribute('onchange', 'return cart_list_comment_save(\'' + catn + '\', \'' + type + '\', this.parentElement)');
            });

        return false;
    };

    return true;
};

function cart_list_comment_save(catn, type, element) {
    if (catn !== null && catn !== undefined && type !== null && type !== undefined && element !== null && element !== undefined) {
        // Инициализация
        let text = element.children[0].value;

        // Обновление заголовка (предзагрузка)
        if (text.trim() == '') {
            element.innerHTML = 'Комментарий к заказу';
        } else {
            element.innerHTML = text;
        };

        // Деинициализация счетчика
        document.getElementById(element.id + '-textarea-counter').remove();

        // Запись аттрибута (предзагрузка)
        element.setAttribute('onclick', 'return cart_list_comment_edit(\'' + catn + '\', this);');

        $.ajax({
            url: '/cart/' + catn + '/edit/comm',
            type: 'post',
            dataType: 'json',
            data: {
                '_csrf': yii.getCsrfToken(),
                'type': type,
                'text': text
            },
            success: function (data, status, xhr) {
                // Заголовок
                if (data.comm !== undefined) {
                    // Обновление заголовка
                    element.innerHTML = data.comm;

                    // Запись аттрибута
                    element.setAttribute('onclick', 'return cart_list_comment_edit(\'' + catn + '\', this);');
                };

                cart_response_success(data, status, xhr);
            },
            error: cart_response_error
        });

        return false;
    };

    return true;
};

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

    main_response(data, status, xhr);
};

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

    cart_response(data, status, xhr);
};

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

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

    cart_response(data, status, xhr);
};
