/*
 * 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 appendActivityLog(title, subtitle, content, icon, timestamp) {
    if (typeof timestamp == "undefined") {
        timestamp = time();
    }
    let entry = {
        title: title,
        subtitle: subtitle,
        content: content,
        icon: icon,
        timestamp: timestamp
    };

    let log = getStorage("activitylog");
    if (log == null) {
        log = [];
    } else {
        try {
            log = JSON.parse(log);
        } catch (ex) {
            log = [];
        }
    }

    let pushed = false;
    let datestr = formatTimestamp("Y-m-d", timestamp);
    for (var i = 0; i < log.length; i++) {
        if (formatTimestamp("Y-m-d", log[i].date) == datestr) {
            log[i].entries.push(entry);
            pushed = true;
            break;
        }
    }
    if (!pushed) {
        log.push({
            date: timestamp,
            entries: [
                entry
            ]
        });
    }

    console.log("Added activity log entry", entry);
    console.log(log);

    setStorage("activitylog", JSON.stringify(log));

    // Trim the log soon but don't block for it
    setTimeout(trimActivityLog, 100);
}

function clearActivityLog() {
    setStorage("activitylog", "[]");
}

function trimActivityLog() {
    let log = JSON.parse(getStorage("activitylog"));

    log.sort(function (x, y) {
        if (x.date < y.date) {
            return 1;
        } else if (x.date > y.date) {
            return -1;
        }
        return 0;
    });

    let entries = 0;
    let allowed = SETTINGS.activitylog_maxlength;

    let newlog = [];

    for (var i = 0; i < log.length; i++) {
        let logdate = {
            date: log[i].date,
            entries: []
        };
        for (var j = 0; j < log[i].entries.length; j++) {
            if (entries < allowed) {
                logdate.entries.push(log[i].entries[j]);
            }
            entries++;
        }
        if (logdate.entries.length > 0) {
            newlog.push(logdate);
        }
    }

    if (entries - allowed > 0) {
        newlog[newlog.length - 1].entries.push({
            title: "Log Trimmed",
            subtitle: "",
            content: (entries - allowed) + " older " + ((entries - allowed) == 1 ? "entry was" : "entries were") + " removed from the log.",
            icon: "fas fa-cut",
            timestamp: newlog[newlog.length - 1].date
        });
    }

    console.log(log);
    console.log(newlog);
    setStorage("activitylog", JSON.stringify(newlog));
}