// Micara bridge — i18n FR/EN (décision produit : EN+FR dès le départ)
// Repris de l'ancien renderer.js (t_fa529748) : mêmes clés, mêmes textes,
// emojis retirés (règle Nicolas : jamais d'emoji dans les CTA).
// Le moteur (engine.js) et l'UI React (App.jsx) consomment ce module.
export const I18N = {
  fr: {
    title: 'Micara Bridge',
    email: 'Email',
    password: 'Mot de passe',
    login: 'Se connecter',
    loginError: 'Connexion impossible : %s',
    sessionExpired: 'Session expirée — reconnectez-vous.',
    connecting: 'Connexion au signal…',
    connected: 'Connecté',
    lost: 'Signal perdu — reconnexion…',
    space: 'Espace',
    spaceCode: 'Code de l’espace',
    dashboard: 'Ouvrir le dashboard',
    logout: 'Se déconnecter',
    output: 'Sortie audio',
    outputBlackhole: 'Micara Mic',
    outputBlackholeLong: 'Micara Mic (micro virtuel — pour Teams)',
    outputSpeakers: 'Haut-parleurs',
    outputSpeakersLong: 'Haut-parleurs (test latence)',
    micSetupTitle: 'Micro Micara',
    micSetupApplied: 'Micro par défaut du système réglé sur « %s ».',
    micSetupFailed: 'Impossible de régler le micro par défaut automatiquement (%s).',
    micSetupReasonMissing: 'outil absent — installez : brew install switchaudio-osx',
    micSetupReasonNotFound: 'device Micara introuvable — BlackHole est-il installé ?',
    micSetupTeamsHint: 'Dans Teams : Réglages → Appareils → Microphone → « %s ».',
    micSetupApply: 'Définir le micro par défaut',
    micSetupOk: 'Compris',
    updateReady: 'Mettre à jour maintenant (v%s)',
    updateDownloading: 'Mise à jour v%s — téléchargement',
    updateError: 'Mise à jour v%s disponible, mais téléchargement impossible',
    streamStart: 'Flux reçu (téléphone %s) — lecture…',
    noBlackhole: 'BlackHole introuvable — sortie par défaut (surveillez vos haut-parleurs !)',
    micDenied: 'Permission micro refusée — labels audio invisibles : BlackHole non identifiable. Autorisez Micara dans Réglages Système → Confidentialité et sécurité → Microphone (l\'app se corrige toute seule ensuite).',
    version: 'Version',
    logTitle: 'Journal',
    statusTitle: 'État du bridge',
    sleeping: 'En veille — prêt pour la prochaine réunion',
  },
  en: {
    title: 'Micara Bridge',
    email: 'Email',
    password: 'Password',
    login: 'Sign in',
    loginError: 'Cannot connect: %s',
    sessionExpired: 'Session expired — please sign in again.',
    connecting: 'Connecting to signal…',
    connected: 'Connected',
    lost: 'Signal lost — reconnecting…',
    space: 'Space',
    spaceCode: 'Space code',
    dashboard: 'Open dashboard',
    logout: 'Sign out',
    output: 'Audio output',
    outputBlackhole: 'Micara Mic',
    outputBlackholeLong: 'Micara Mic (virtual mic — for Teams)',
    outputSpeakers: 'Speakers',
    outputSpeakersLong: 'Speakers (latency test)',
    micSetupTitle: 'Micara mic',
    micSetupApplied: 'System default mic set to « %s ».',
    micSetupFailed: 'Could not set the default mic automatically (%s).',
    micSetupReasonMissing: 'tool missing — install with: brew install switchaudio-osx',
    micSetupReasonNotFound: 'Micara device not found — is BlackHole installed?',
    micSetupTeamsHint: 'In Teams: Settings → Devices → Microphone → « %s ».',
    micSetupApply: 'Set default mic',
    micSetupOk: 'Got it',
    updateReady: 'Update now (v%s)',
    updateDownloading: 'Update v%s — downloading',
    updateError: 'Update v%s available, but download failed',
    streamStart: 'Stream received (phone %s) — playing…',
    noBlackhole: 'BlackHole not found — using default output (watch your speakers!)',
    micDenied: 'Microphone permission denied — audio labels hidden: cannot identify BlackHole. Allow Micara in System Settings → Privacy & Security → Microphone (the app will fix itself after).',
    version: 'Version',
    logTitle: 'Log',
    statusTitle: 'Bridge status',
    sleeping: 'Asleep — ready for the next meeting',
  },
};

// langue système → fr/en (comme l'ancien renderer.js)
export function detectLang() {
  const lang = String(typeof navigator !== 'undefined' ? navigator.language : 'fr').toLowerCase();
  return lang.startsWith('fr') ? 'fr' : 'en';
}

// t('key') ou t('key', arg) → remplace le premier %s (format historique du bridge)
export function t(lang, key, arg) {
  const table = I18N[lang] || I18N.fr;
  const s = table[key] ?? I18N.fr[key] ?? key;
  return arg === undefined ? s : s.replace('%s', arg);
}
