// tools/mapper_console.js (use from DevTools Console on the live table)
(() => {
const order = Array.from({length:37}, (_,i)=>i); // 0..36
const overlay = document.createElement('div');
overlay.style.position='fixed';
overlay.style.left=0; overlay.style.top=0;
overlay.style.right=0; overlay.style.bottom=0;
overlay.style.zIndex=999999; overlay.style.cursor='crosshair';
overlay.style.background='rgba(0,0,0,0.15)';
overlay.innerHTML = `
Mapper
1) Click the board area once (root).
2) Then click numbers in order: 0,1,2,...,36.
Esc = undo last, Enter = finish, Q = quit
`;
document.body.appendChild(overlay);
let root = null;
let rootBox = null;
const points = {};
let step = -1;
function updateHint(){
const hint = document.getElementById('mm-hint');
if(!root){
hint.innerHTML = hint.innerHTML.replace(/2\).*/,'2) Then click numbers in order: 0,1,2,...,36.
Esc = undo last, Enter = finish, Q = quit');
hint.firstChild.textContent = hint.firstChild.textContent;
return;
}
const next = order[step] ?? order[0];
hint.innerHTML = `
Mapper
Root set. Click number: ${next}
Esc = undo last, Enter = finish, Q = quit`;
}
function finish(){
const data = {
site:"stake", table:"ruleta_es",
url: location.href.split('?')[0],
mode:"coords",
boardSelector: "body",
betOpenSelector: "",
chipSelectors: {"0.10":"","0.20":""},
numbers: points
};
const txt = JSON.stringify(data, null, 2);
console.log(txt);
navigator.clipboard?.writeText(txt).catch(()=>{});
overlay.remove();
}
overlay.addEventListener('click', (e)=>{
if(!root){
root = document.elementFromPoint(e.clientX, e.clientY);
rootBox = root.getBoundingClientRect();
step = 0;
updateHint();
return;
}
const n = order[step];
points[n] = { x: e.clientX - rootBox.left, y: e.clientY - rootBox.top };
step++;
if(step >= order.length){ finish(); }
else { updateHint(); }
});
window.addEventListener('keydown', (e)=>{
if(e.key==='Escape'){ // undo
if(step>0){ step--; delete points[order[step]]; updateHint(); }
e.preventDefault();
}
if(e.key==='Enter'){ finish(); e.preventDefault(); }
if(e.key.toLowerCase()==='q'){ overlay.remove(); e.preventDefault(); }
});
updateHint();
})();