/* global chrome */

function evalInMainWorld(fn) {
  const script = document.createElement('script');
  script.textContent = `((${fn})())`;
  document.documentElement.appendChild(script);
}

async function exec(name) {
  let result;
  switch (name) {
    case 'getMessage':
      result = {
        id: chrome.i18n.getMessage('@@extension_id'),
        name: chrome.i18n.getMessage('extName')
      };
      break;
    case 'getAcceptLanguages':
      result = await new Promise((resolve) => chrome.i18n.getAcceptLanguages(resolve));
      break;
  }

  const funcStr = `() => { require('electron').ipcRenderer.send('success', ${JSON.stringify(result)}) }`;
  evalInMainWorld(funcStr);
}

window.addEventListener('message', (event) => {
  exec(event.data.name);
});

evalInMainWorld(() => {
  window.exec = (name) => window.postMessage({ name });
});
