/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

function addItem(name, code, price, id) {
    if ($(".list-group-item[data-code='" + code + "']").length) {
        updateQty($(".list-group-item[data-code='" + code + "']").find(".qty-plus"), 1);
        return;
    }
    price = (price * 1.0).toFixed(2);
    $("#pos-lines-box").append('<div class="list-group-item" data-code="' + code + '" data-itemid="' + id + '">'
            + '<div class="d-flex w-100 justify-content-between mb-2">'
            + '<h5 class="item-name">'
            + name
            + '</h5>'
            + '<h5>'
            + '<small class="item-code mr-1">' + code + '</small>'
            + '<span class="badge badge-light">'
            + '$<span class="line-total">'
            + price
            + '</span>'
            + '</span>'
            + '</h5>'
            + '</div>'
            + '<div class="d-inline-flex">'
            + '<div class="input-group qty-control">'
            + '<div class="input-group-prepend">'
            + '<span class="input-group-text pr-1"><b>$</b></span>'
            + '</div>'
            + '<input type="money" class="form-control item-price" value="' + price + '"/>'
            + '        <div class="input-group-append">'
            + '            <span class="btn btn-outline-primary open-number-pad-btn">'
            + '                <i class="fas fa-keyboard"></i>'
            + '            </span>'
            + '        </div>'
            + '<div class="input-group-prepend">'
            + '<span class="input-group-text px-2"><i class="fas fa-times"></i></span>'
            + '<button class="btn btn-red qty-minus" type="button"><i class="fas fa-trash"></i></button>'
            + '</div>'
            + '<input type="number" class="form-control item-qty px-2" value="1" />'
            + '<div class="input-group-append">'
            + '<button class="btn btn-light-green qty-plus" type="button"><i class="fas fa-plus"></i></button>'
            + '</div>'
            + '</div>'
            + '</div>'
            + '</div>');
    recalculate();
}

function findItem(q) {
    function decodeThenAddItem(item) {
        var code = item.code1;
        console.log(code);
        if (code == "" && item["code2"] != "") {
            code = item["code2"];
        } else if (code == "") {
            code = "---";
        }
        var price = item['price'];
        if (price == null || price == "" || price == 0) {
            if (!$(".list-group-item[data-code='" + code + "']").length) {
                bsprompt("Enter Price",
                        "No price set.  Enter a price for this item:",
                        "Add Item",
                        "Cancel",
                        "number",
                        function (result) {
                            addItem(item['name'], code, result, item['id']);
                        });
                return;
            }
        }
        addItem(item['name'], code, price, item['id']);
    }
    if (q == "") {
        return;
    }
    $.get("action.php", {
        action: "itemsearch",
        q: q,
        customer: customerid
    }, function (data) {
        if (data['items'].length == 1) {
            decodeThenAddItem(data['items'][0]);
        } else if (data['items'].length > 1) {
            var options = [];
            for (var i = 0; i < data['items'].length; i++) {
                var text = data['items'][i]['name'];
                if (data['items'][i]['price'] != null) {
                    text += " <span class=\"ml-auto\">$" + data['items'][i]['price'] + "</span>";
                }
                options.push({"text": text, "val": data['items'][i]['id']});
            }
            bschoices(
                    "Multiple Results",
                    "More than one item match the query.  Pick the correct one:",
                    options,
                    "Cancel",
                    function (result) {
                        for (var i = 0; i < data['items'].length; i++) {
                            if (data['items'][i]['id'] == result) {
                                decodeThenAddItem(data['items'][i]);
                                break;
                            }
                        }
                    }
            );
        }
    }).fail(function () {
        alert("Error");
    });
}

function removezero() {
    $("#pos-lines-box .list-group-item").each(function () {
        var qty = $(".item-qty", this).val() * 1.0;
        if (qty == 0) {
            $(this).remove();
        }
    });
}

function updateQty(btn, diff) {
    var qtybox = $(btn).parent().parent().find(".item-qty");
    var qty = parseInt(qtybox.val());
    qty += diff;
    if (qty > 0) {
        qtybox.val(qty);
        var minbtn = $(btn).parent().parent().find(".qty-minus");
        if (qty == 1) {
            minbtn.html("<i class=\"fas fa-trash\"></i>");
        } else {
            minbtn.html("<i class=\"fas fa-minus\"></i>");
        }
    } else {
        qtybox.closest(".list-group-item").remove();
    }
    recalculate();
}

$("#pos-lines-box").on("click", ".qty-minus", function () {
    updateQty(this, -1);
});

$("#pos-lines-box").on("click", ".qty-plus", function () {
    updateQty(this, 1);
});

$("#pos-lines-box").on("change blur", ".item-qty,.item-price", function () {
    recalculate();
});

$("#pos-lines-box").on("keypress", ".item-qty,.item-price", function (e) {
    if (e.which === 13) {
        recalculate();
    }
});

$("#pos-lines-box").on("click", ".open-number-pad-btn", function (e) {
    var inputbox = $(this).parents('.input-group').children(".item-price");
    var value = inputbox.val();
    if (isNaN(value)) {
        value = '';
    }
    bsnumpad("Keyboard", value, "Save", "Cancel", function (answer) {
        inputbox.val(answer);
        recalculate();
    });
});

$("#barcode").on('keypress', function (e) {
    if (e.which === 13) {
        findItem($("#barcode").val());
        $("#barcode").val("");
    }
});

$("#barcodebtn").on("click", function () {
    findItem($("#barcode").val());
    $("#barcode").val("");
});

$("#barcode").focus();