/* 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 = '
Reconnaissance faciale

'; 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(); })();