const { contextBridge, ipcRenderer } = require('electron');

// API exposée au renderer (contextIsolation) — app silencieuse + audio.
contextBridge.exposeInMainWorld('bridge', {
  // état & auth
  state: () => ipcRenderer.invoke('app:state'),
  login: (opts) => ipcRenderer.invoke('app:login', opts),
  logout: () => ipcRenderer.invoke('app:logout'),
  openDashboard: () => ipcRenderer.invoke('app:open-dashboard'),
  installUpdate: () => ipcRenderer.invoke('app:install-update'),
  // thème actif du serveur (tokens /api/theme, chargés par le main — zéro CORS)
  theme: () => ipcRenderer.invoke('app:theme'),
  // événements du main
  onAuthed: (cb) => ipcRenderer.on('app:authed', (_e, r) => cb(r)),
  onStatus: (cb) => ipcRenderer.on('app:status', (_e, s) => cb(s)),
  onUpdate: (cb) => ipcRenderer.on('app:update', (_e, u) => cb(u)),
  onSignal: (cb) => ipcRenderer.on('app:signal', (_e, m) => cb(m)),
  // micro par défaut du système (t_dd15f264) : re-tenter / masquer / état
  applyDefaultMic: () => ipcRenderer.invoke('app:mic-apply'),
  dismissMicNotice: () => ipcRenderer.invoke('app:mic-dismiss'),
  onMicSetup: (cb) => ipcRenderer.on('app:mic-setup', (_e, s) => cb(s)),
  // veille auto : le renderer (moteur audio) rapporte son activité → le main
  // l'inclut dans le heartbeat (state 'active'|'sleep') et la barre de menu.
  activity: (payload) => ipcRenderer.send('app:activity', payload),
  signalSend: (msg) => ipcRenderer.send('app:signal-send', msg),
  logFile: (line) => ipcRenderer.send('app:log-file', line),
  // audio (sortie BlackHole / haut-parleurs)
  devices: () => ipcRenderer.invoke('audio:devices'),
  start: (opts) => ipcRenderer.send('audio:start', opts),
  chunk: (buf) => ipcRenderer.send('audio:chunk', buf),
  stop: () => ipcRenderer.send('audio:stop'),
  onAudioStatus: (cb) => ipcRenderer.on('audio:status', (_e, s) => cb(s)),
});
