/*
 * 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/.
 */
var scannerCodes = [];
function resetScanner() {
    scannerCodes = [];
    app.popup.close("#scanEventTypePopup");
    app.popup.close("#scanEventPopup");
    router.refreshPage();
}
function brokenScannerEsc() {
    app.dialog.confirm(
            "Clear list?",
            "Confirm",
            function () {
                resetScanner();
            },
            function () {
                // cancel
            }
    );
}
function brokenScannerScan() {
    scanBarcode(function (code) {
        playSound("scan");
        if (code != "" && code.length > 5 && code.match(/^[0-9A-Z]+$/i)) {
            addCodeToScannerList(code);
        } else {
            app.dialog.alert("That's not a valid tracking code.", "Error");
        }
    }, function (error) {
        app.dialog.alert(error, "Error");
    });
}
function brokenScannerAddTextEntry() {
    var code = $("#brokenscannerinput").val();
    if (code != "" && code.length > 5 && code.match(/^[0-9A-Z]+$/i)) {
        addCodeToScannerList(code);
        $("#brokenscannerinput").val("");
    } else {
        app.dialog.alert("That's not a valid tracking code.", "Error");
    }
}
function addCodeToScannerList(code) {
    code = code.toUpperCase();
    var signatureregexes = [
        /^E[A-Z][0-9]{9}US$/, // Priority Mail Express
        /^[RV][A-Z][0-9]{9}[A-Z]{2}$/, // Registered mail
        /^(420[0-9]{5})?7[0-9]{19}$/ // Certified Mail
    ];
    /**
     * Regex of IMpb codes that don't need anything special
     * @type {RegExp}
     */
    var stcregex = /^(420[0-9]{5})?[0-9]{2}(001|023|055|056|112|113|134|135|138|140|141|142|164|209|211|259|265|269|346|361|389|390|419|431|490|502|551|563|612|624|671|701|702|703|704|723|746|748|790|791|793|794|905|906|907|909|971|972)[0-9]+$/;
    var signatureRequired = false;
    for (var i = 0; i < signatureregexes.length; i++) {
        if (code.match(signatureregexes[i])) {
            signatureRequired = true;
            break;
        }
    }
    if (!code.match(stcregex)) {
        signatureRequired = true;
    }
    var codeEntryTemplate = Template7.compile('
'
            + '  '
            + '');
    if (signatureRequired) {
        if (code.match(/^E[A-Z][0-9]{9}US$/)) {
            app.dialog.confirm(
                    "Does this item contain a waiver of signature endorsement?",
                    "Express Item",
                    function () {
                        $("#codelist").append(codeEntryTemplate({
                            code: code
                        }));
                    },
                    function () {
                        // cancel
                    }
            );
        } else {
            app.dialog.confirm(
                    "It looks like this item might require a signature or other special procedures. Add it anyways?",
                    "Special Item",
                    function () {
                        $("#codelist").append(codeEntryTemplate({
                            code: code
                        }));
                    },
                    function () {
                        // cancel
                    }
            );
        }
    } else {
        $("#codelist").append(codeEntryTemplate({
            code: code
        }));
    }
}
function chooseScanEvent() {
    if ($("#codelist li.codelist-entry").length <= 0) {
        app.dialog.alert("Nothing was entered!");
        return;
    }
    $("#codelist li.codelist-entry").each(function () {
        scannerCodes.push($(this).data("code"));
    });
    openEventPopup();
}
function openEventPopup() {
    var eventItemTemplate = Template7.compile(''
            + '  '
            + '    
{{button}}
'
            + '    
'
            + '  
 '
            + '');
    $("#scanEventPopup ul.eventlist").html("");
    for (i in SETTINGS.scannerevents) {
        var event = SETTINGS.scannerevents[i];
        $("#scanEventPopup ul.eventlist").append(eventItemTemplate({
            button: event.button,
            title: event.title
        }));
    }
    app.popup.open("#scanEventPopup");
}
function openEventTypePopup(eventname) {
    var eventItemTemplate = Template7.compile(''
            + '  '
            + '    
{{button}}
'
            + '    
'
            + '  
 '
            + '');
    var eventafter = false;
    for (i in SETTINGS.scannerevents) {
        var event = SETTINGS.scannerevents[i];
        if (event.title == eventname) {
            eventafter = event.after;
            break;
        }
    }
    $("#scanEventTypePopup ul.eventlist").html("");
    for (i in eventafter) {
        var event = eventafter[i];
        $("#scanEventTypePopup ul.eventlist").append(eventItemTemplate({
            button: event.button,
            title: event.title,
            parenttitle: eventname,
            form3849: event.after == "3849" ? "1" : "0"
        }));
    }
    app.popup.open("#scanEventTypePopup");
}
function saveScanCode(code) {
    if (getStorage("scanevents") == null) {
        setStorage("scanevents", "[]");
    }
    var events = JSON.parse(getStorage("scanevents"));
    events.push(code);
    setStorage("scanevents", JSON.stringify(events));
    appendActivityLog("Scanned Item", code.event.join('  '), code.code + (code.form3849 == "" ? "" : "
Form 3849: " + code.form3849), "fas fa-barcode");
}
$(".view-main").off("click", "#codelist li.codelist-entry");
$(".view-main").on("click", "#codelist li.codelist-entry", function () {
    var entry = $(this);
    var code = entry.data("code");
    app.dialog.confirm(
            "Remove " + code + " from list?",
            "Confirm",
            function () {
                // delete
                entry.remove();
            },
            function () {
                // cancel
            }
    );
});
$("#app").off("click", "ul li.eventtypebutton");
$("#app").on("click", "ul li.eventtypebutton", function () {
    var eventname = $(this).data("parenttitle");
    var eventtypename = $(this).data("title");
    var scanEvent = [];
    scanEvent.push(eventname);
    scanEvent.push(eventtypename);
    if ($(this).data("form3849") == "1") {
        // TODO: make this not a hack
        app.dialog.prompt("Key in 3849 form", "3849 Form", function (formcode) {
            for (i in scannerCodes) {
                saveScanCode({
                    code: scannerCodes[i],
                    event: scanEvent,
                    form3849: formcode,
                    date: timestampToDateTimeString((new Date).getTime() / 1000)
                });
            }
            app.toast.show({
                text: 'Information recorded successfully!',
                position: "center",
                destroyOnClose: true,
                closeTimeout: 1000 * 3
            });
            resetScanner();
        }, function () {
        }, "");
    } else {
        for (i in scannerCodes) {
            saveScanCode({
                code: scannerCodes[i],
                event: scanEvent,
                form3849: "",
                date: timestampToDateTimeString((new Date).getTime() / 1000)
            });
        }
        app.toast.show({
            text: 'Information recorded successfully!',
            position: "center",
            destroyOnClose: true,
            closeTimeout: 1000 * 3
        });
        resetScanner();
    }
});
$("#brokenscannerinput").on('keypress', function (e) {
    if (event.key === "Enter") {
        brokenScannerAddTextEntry();
    }
});