const logMsgActivesSections = new Set();

function logMsgAddActiveSection(sectionName) {
  logMsgActivesSections.add(sectionName);
}

function logMsgRemoveActiveSection(sectionName) {
  logMsgActivesSections.delete(sectionName);
}

function logMsg(section, message){
  if (logMsgActivesSections.has(section))
    console.log(section, ' : ', message)
}

function intersectionObserverLog(message) {
    logMsg('intersectionObserver', message);
}
function intersectionObserverLogVisibility(_id, _visible) {
    if (_visible) {
        intersectionObserverLog(_id + ' is Visible');
    } else {
        intersectionObserverLog(_id + ' is NOT Visible');
    }
}

const intersectionObserverRegistry = new Object();
function setIntersectionObserverRegistry(parametre, valeur)
{
  intersectionObserverRegistry[parametre] = valeur;
}
function getIntersectionObserverRegistry(parametre)
{
  return intersectionObserverRegistry[parametre];
}
function entryVisiblity(_id, _visible) {
    let entry=getIntersectionObserverRegistry(_id);
    if (entry) return entry(_visible);
    return intersectionObserverLogVisibility(_id, _visible)
}

// Create a function that will handle any intersection between some elements and the viewport.
const handleIntersectionObserverEntries = function (entries) {
  entries.forEach(entry => {
    intersectionObserverLog(entry.target.id+' ratio '+entry.intersectionRatio);
    if (typeof entryVisiblity === 'function') entryVisiblity(entry.target.id, entry.isIntersecting);
  });
}
const intersectionObserver = new IntersectionObserver(handleIntersectionObserverEntries,{
		// Dès qu'il y a ne serait-ce qu'un pixel au dessus de la ligne rouge
		// => donc threshold = 1
		threshold: 0,
		// On met la hauteur en pixel entre la fin de l'image et la ligne rouge
		// C'est négatif parce qu'on entre à l'intérieur de l'image. Si le nombre
		// était positif, alors la ligne rouge se retrouverait sous l'image
		rootMargin: '-1px 0px'
	});

function addIntersectionObserverEntry(_id, _func)
{
    let item = document.querySelector('#'+_id);
    if ((item) && (intersectionObserver)) {
        setIntersectionObserverRegistry(_id, _func);
        intersectionObserver.observe(item);
        logMsg('intersectionObserver', 'Add entry for '+ _id);
    }
}
