/* Module partage - Impression, email, QR code */ let nbExemplaires = 1; let copiesMax = 5; async function ouvrirImpression() { copiesMax = config.impression?.copies_max || 5; nbExemplaires = 1; document.getElementById('nb-exemplaires').textContent = nbExemplaires; cadreChoisi = null; const hasCadres = await chargerCadresChoixImpression(); if (hasCadres) { document.getElementById('popup-cadre-impression').classList.remove('cache'); } else { document.getElementById('form-impression').classList.remove('cache'); } } function fermerImpression() { document.getElementById('form-impression').classList.add('cache'); cadreChoisi = null; } function confirmerCadreImpression() { document.getElementById('popup-cadre-impression').classList.add('cache'); document.getElementById('form-impression').classList.remove('cache'); } function annulerCadreImpression() { document.getElementById('popup-cadre-impression').classList.add('cache'); cadreChoisi = null; } async function chargerCadresChoixImpression() { const fmt = (config.impression?.format || '15x20').replace('-2up', ''); const data = await apiGet(`/api/cadres-impression/${fmt}`).catch(() => null); if (!data || data.disponibles.length === 0) return false; const grille = document.getElementById('grille-cadres-impression'); grille.innerHTML = ''; const divAucun = document.createElement('div'); divAucun.className = 'cadre-choix-item cadre-choix-aucun cadre-selectionne'; divAucun.innerHTML = '
Sans cadre'; divAucun.onclick = () => { cadreChoisi = null; grille.querySelectorAll('.cadre-choix-item').forEach(el => el.classList.remove('cadre-selectionne')); divAucun.classList.add('cadre-selectionne'); }; grille.appendChild(divAucun); for (const nom of data.disponibles) { const div = document.createElement('div'); div.className = 'cadre-choix-item'; div.innerHTML = `
${nom}
${nom.replace('.png','')}`; div.onclick = () => { cadreChoisi = nom; grille.querySelectorAll('.cadre-choix-item').forEach(el => el.classList.remove('cadre-selectionne')); div.classList.add('cadre-selectionne'); }; grille.appendChild(div); } return true; } function changerExemplaires(delta) { nbExemplaires = Math.max(1, Math.min(copiesMax, nbExemplaires + delta)); document.getElementById('nb-exemplaires').textContent = nbExemplaires; } async function lancerImpression() { if (!photoFinale) return; fermerImpression(); // Pour les strips, imprimer la version 2 bandes sur 10x15 const fichierImpression = photoImpression || photoFinale; afficherStatut(`Impression de ${nbExemplaires} exemplaire(s)...`, 'succes'); const resultat = await apiPost('/api/imprimer', { photo: fichierImpression, copies: nbExemplaires, cadre: cadreChoisi || undefined, format_papier: formatImpression || undefined, }); if (resultat.succes) { afficherStatut(`${nbExemplaires} exemplaire(s) envoye(s) a l'imprimante !`, 'succes'); } else { afficherStatut('Erreur d\'impression', 'erreur'); } } async function ouvrirEmail() { document.getElementById('form-email').classList.remove('cache'); document.getElementById('input-email').value = ''; await chargerSuggestionsEmail(); } function fermerEmail() { document.getElementById('form-email').classList.add('cache'); document.getElementById('input-email').value = ''; } async function chargerSuggestionsEmail() { const container = document.getElementById('email-suggestions'); container.innerHTML = ''; const data = await apiGet('/api/emails/historique').catch(() => null); if (!data || !data.emails || data.emails.length === 0) return; for (const email of data.emails) { const btn = document.createElement('button'); btn.textContent = email; btn.onclick = () => { document.getElementById('input-email').value = email; }; container.appendChild(btn); } } function clavierTape(car) { const input = document.getElementById('input-email'); input.value += car; filtrerSuggestionsEmail(); } function clavierEffacer() { const input = document.getElementById('input-email'); input.value = input.value.slice(0, -1); filtrerSuggestionsEmail(); } function filtrerSuggestionsEmail() { const val = document.getElementById('input-email').value.toLowerCase(); const btns = document.querySelectorAll('#email-suggestions button'); btns.forEach(btn => { btn.style.display = (!val || btn.textContent.includes(val)) ? '' : 'none'; }); } async function envoyerEmail() { const email = document.getElementById('input-email').value.trim(); if (!email || !photoFinale) return; fermerEmail(); afficherStatut('Envoi en cours...', 'succes'); const resultat = await apiPost('/api/email', { email, photo: photoFinale }); if (resultat.spool) { afficherStatut('Vous recevrez votre photo par email dans la semaine', 'succes'); } else if (resultat.succes) { afficherStatut('Email envoyé !', 'succes'); } else { afficherStatut('Erreur d\'envoi email', 'erreur'); } } async function afficherQR() { const zone = document.getElementById('zone-qr'); zone.classList.toggle('cache'); if (!zone.classList.contains('cache')) { const booth = config.booth || {}; if (booth.actif && booth.url) { const info = await apiGet('/api/booth/info').catch(() => null); const eventId = booth.event_id || 'default'; const pw = info?.password || ''; const qrUrl = `${booth.url}/${eventId}?p=${pw}`; document.getElementById('img-qr').src = `/api/qr?url=${encodeURIComponent(qrUrl)}`; } else { const resultat = await apiGet('/api/qr/galerie'); if (resultat.chemin) { document.getElementById('img-qr').src = resultat.chemin; } else { afficherStatut('QR Code non configure', 'erreur'); zone.classList.add('cache'); } } } }