const utils = require('./utils');
const log = require('./log');
const sql = require('./sql');

async function generateSourceId() {
    const sourceId = utils.randomString(12);

    log.info("Generated sourceId=" + sourceId);

    await sql.doInTransaction(async () => {
        await sql.insert("source_ids", {
            source_id: sourceId,
            date_created: utils.nowDate()
        });
    });

    await refreshSourceIds();

    return sourceId;
}

async function refreshSourceIds() {
    allSourceIds = await sql.getFlattenedResults("SELECT source_id FROM source_ids ORDER BY date_created DESC");
}

let allSourceIds = [];

sql.dbReady.then(refreshSourceIds);

function isLocalSourceId(srcId) {
    return allSourceIds.includes(srcId);
}

const currentSourceIdPromise = generateSourceId();

async function getCurrentSourceId() {
    return await currentSourceIdPromise;
}

module.exports = {
    generateSourceId,
    getCurrentSourceId,
    isLocalSourceId
};