const EnumSessionWorker = Object.freeze({
    MESSAGE: 'SessionWorker.MESSAGE',
    START: 'SessionWorker.START',
    CLEAR: 'SessionWorker.CLEAR',
    TIMEOUT: 'SessionWorker.TIMEOUT',
});

let timeout = null;
let sessionTime = null;

function getCurrentTime(){
    return Intl.DateTimeFormat('it-IT', {hour: '2-digit', minute: '2-digit', second: '2-digit'}).format(new Date());
}

function mt(m){
    return `${getCurrentTime} - [sessionWorker]: ${m}`;
}

onmessage = function (ev) {
    const sessionExpired = () => {
        console.log(mt('session EXPIRED'));
        postMessage({type: EnumSessionWorker.TIMEOUT})
    }

    const { type, data } = ev.data;

    if (type === EnumSessionWorker.START){
        console.log(mt('START session'));
        const sessionExpiration = data;
        sessionTime = sessionExpiration;
        timeout = setTimeout(sessionExpired, sessionTime);
    } else if (type === EnumSessionWorker.CLEAR){
        console.log(mt('CLEAR session'));
        clearTimeout(timeout);
        timeout = setTimeout(sessionExpired, sessionTime);
    } else { //EnumSessionWorker.MESSAGE
        const message = data;
        console.log(mt('message recieved'), message);
    }
    
    postMessage({ type, data: 'OK' });
}