/* widget: Gevoelszones */
/* =========================================================
Individual check-in (Zones of Regulation-stijl): kies je zone, krijg een
passende tip - anders dan de Gevoelsmeter (mood.js), die is een anonieme
klaspoll, geen persoonlijke check-in met uitleg.
==========================================================*/
function mountFeelings(root, initState){
let picked = (initState && initState.picked) || null;
const ZONES = ["blue","green","yellow","red"];
const EMOJI = { blue:"💧", green:"🌿", yellow:"⚡", red:"🔥" };
root.innerHTML = `
`;
const zonesEl = root.querySelector(".fz-zones"), detail = root.querySelector(".fz-detail");
function pick(id){
picked = id;
tone(id==="blue"?294:id==="green"?392:id==="yellow"?523:220, 0.14, 0, "sine", .08);
draw();
}
function draw(){
zonesEl.innerHTML = "";
ZONES.forEach(id=>{
const b = document.createElement("button");
b.className = "fz-zone " + id + (picked === id ? " active" : "");
b.setAttribute("aria-pressed", String(picked === id));
const emoji = document.createElement("span");
emoji.className = "fz-emoji";
emoji.textContent = EMOJI[id];
const label = document.createElement("span");
label.className = "fz-label";
label.textContent = T("fzZone_" + id);
b.append(emoji, label);
b.addEventListener("click", ()=>pick(id));
zonesEl.appendChild(b);
});
if(picked){
detail.hidden = false;
detail.className = "fz-detail " + picked;
detail.querySelector(".fz-detail-title").textContent = EMOJI[picked] + " " + T("fzZone_" + picked);
detail.querySelector(".fz-detail-desc").textContent = T("fzDesc_" + picked);
detail.querySelector(".fz-detail-tip").textContent = T("fzTip_" + picked);
}else{
detail.hidden = true;
}
}
function labels(){
root.querySelector(".fz-mission").textContent = T("wg_feelings_d");
draw();
}
document.addEventListener("langchange", labels);
labels();
return { getState: ()=>({ picked }) };
}