/* DONA_V7_FACE — capture ponctuelle, aucun flux continu ni enrôlement. */
(() => {
'use strict';
if (document.getElementById('donaFaceButton')) return;
function init() {
const camera = document.getElementById('avTopCamera') || document.getElementById('cameraPopupButton');
if (!camera) return;
const button = document.createElement('button');
button.id = 'donaFaceButton';
button.className = camera.className;
button.type = 'button';
button.title = 'Reconnaître la personne devant la caméra';
button.setAttribute('aria-label', button.title);
button.innerHTML = '';
camera.after(button);
const box = document.createElement('div');
box.id = 'donaFacePanel'; box.className = 'dona-face-panel';
box.hidden = true;box.setAttribute('role','dialog');
box.setAttribute('aria-label','Reconnaissance faciale Dona');
box.innerHTML = '
';
document.body.append(box);
const text = box.querySelector('#donaFaceText');
let pending = false;
const close = () => {box.hidden = true;};
box.querySelector('#donaFaceClose').addEventListener('click',close);
box.addEventListener('click',e=>{if(e.target===box)close();});
document.addEventListener('keydown',e=>{if(e.key==='Escape'&&!box.hidden)close();});
button.addEventListener('click',async()=>{
if(pending)return;
pending = true;button.disabled = true;
const preview=document.getElementById('cameraPopup');
if(preview && !preview.hidden){document.getElementById('cameraPopupClose')?.click();await new Promise(resolve=>setTimeout(resolve,300));}
box.hidden = false;text.textContent = 'Capture et identification en cours…';
try {
const r = await fetch('/api/dona/face/identify',{
method:'POST',credentials:'same-origin',headers:{'X-Alfred-Request':'1'},cache:'no-store'
});
const data = await r.json();
if(!r.ok)throw new Error(data.error||`Erreur HTTP ${r.status}`);
} catch(err) { pending=false;button.disabled=false;text.textContent=err.message||'Identification indisponible.'; }
});
window.alfredSocket?.on('dona_face_status',data=>{
if(pending && !box.hidden) text.textContent=String(data?.message||'Analyse en cours…');
});
window.alfredSocket?.on('dona_face_result',data=>{
if(!pending)return;
pending=false;button.disabled=false;
text.textContent=String(data?.text||'Aucun résultat exploitable.');
});
}
if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init,{once:true});
else init();
})();