const token=location.hash.slice(1);history.replaceState(null,'',location.pathname);const valid=/^[A-Za-z0-9_-]{43}$/.test(token);const message=(text,error=false)=>{const node=document.getElementById('message');node.textContent=text;node.classList.toggle('error',error);};
for(const [id,platform] of [['mac','macOS'],['win','Windows']]){const button=document.getElementById(id);button.disabled=!valid;button.addEventListener('click',async()=>{button.disabled=true;try{const res=await fetch('/api/device/download',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({token,platform})});const data=await res.json();if(!res.ok)throw new Error(data.error||'Téléchargement indisponible.');const url=new URL(data.url,location.origin);if(url.origin!==location.origin||!url.pathname.startsWith('/downloads/'))throw new Error('Lien refusé.');location.assign(url.href);message('Le téléchargement démarre. Votre lien reste disponible pour activer l’application.');}catch(error){message(error.message,true);}finally{button.disabled=false;}});}
const copy=document.getElementById('copy');copy.disabled=!valid;copy.addEventListener('click',async()=>{try{await navigator.clipboard.writeText(`${location.origin}/activate#${token}`);message('Lien copié. Collez-le dans « Ma licence » dans l’application TransferWing.');}catch{message('La copie a été refusée par le navigateur. Utilisez le lien reçu de votre administrateur.',true);}});if(!valid)message('Ce lien d’activation est incomplet. Ouvrez le lien complet reçu de votre administrateur.',true);
