import { getStoredMobileConfig } from '../api.js'; import { activateMobileAccess, getMobileActivationState } from '../activation.js'; export async function renderActivation(root, onActivated) { const cfg = getStoredMobileConfig(); const logoUrl = cfg.logo_url || '/insuite-logo.svg'; const appName = cfg.app_name || 'Insuite Technicien'; const activation = getMobileActivationState(); const loginBgStyle = cfg.login_bg_url ? `style="background-image:url('${escapeAttr(cfg.login_bg_url)}');background-size:cover;background-position:center"` : ''; root.innerHTML = `
Activation requise

Activer l’accès mobile

Saisissez l’adresse email autorisée et le code reçu par email avant la première authentification.

${activation.activated && activation.email ? `Appareil déjà associé à ${escapeAttr(activation.email)}.` : 'Le code est généré depuis le module Licences mobiles dans le back-office.'}
`; const errBox = root.querySelector('#activationErrBox'); const form = root.querySelector('#activationForm'); form.addEventListener('submit', async (event) => { event.preventDefault(); errBox.style.display = 'none'; const formData = new FormData(form); const email = String(formData.get('email') || '').trim(); const code = String(formData.get('code') || '').trim(); if (!email || !code) { errBox.textContent = 'Renseignez l’adresse email et le code d’activation.'; errBox.style.display = 'block'; return; } try { const state = await activateMobileAccess({ email, code }); if (!state.activated) { errBox.textContent = 'Activation impossible.'; errBox.style.display = 'block'; return; } renderActivationSuccess(root, state, onActivated); } catch (error) { const msg = (() => { switch (error?.data?.error) { case 'license_disabled': return 'Cette licence mobile est suspendue.'; case 'code_expired': return 'Le code d’activation a expiré. Demandez-en un nouveau.'; case 'code_invalid': return 'Le code d’activation est invalide.'; case 'user_not_found': return 'Aucun utilisateur actif ne correspond à cette adresse email.'; default: return error?.status ? 'Activation refusée par le serveur.' : 'Connexion au serveur impossible. Vérifiez le réseau puis réessayez.'; } })(); errBox.textContent = msg; errBox.style.display = 'block'; } }); } function renderActivationSuccess(root, state, onActivated) { const cfg = getStoredMobileConfig(); const logoUrl = cfg.logo_url || '/insuite-logo.svg'; const appName = cfg.app_name || 'Insuite Technicien'; const displayName = state.userName || state.email || 'Compte mobile'; root.innerHTML = `
Activation validée

Compte mobile activé

L’appareil est maintenant autorisé pour ${escapeAttr(displayName)}. Vous pouvez accéder à votre espace personnel.

Compte ${escapeAttr(displayName)}
Activation ${escapeAttr(formatActivationDate(state.activatedAt))}
`; const continueButton = root.querySelector('#btnActivationContinue'); continueButton?.addEventListener('click', () => onActivated(state)); window.setTimeout(() => continueButton?.focus(), 220); } function formatActivationDate(value) { if (!value) { return 'À l’instant'; } const parsed = new Date(value); if (Number.isNaN(parsed.getTime())) { return 'À l’instant'; } return parsed.toLocaleString('fr-FR'); } function escapeAttr(value) { return String(value ?? '') .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); }