/* global chrome */

// We can't use chrome.storage domain from scripts which are injected in ExecutionWorld.MAIN
// This is the only purpose of this script - to send persisted settings to installHook.js content script

async function messageListener(event: MessageEvent) {
  if (event.source !== window) {
    return;
  }

  if (event.data.source === 'react-devtools-hook-installer') {
    if (event.data.payload.handshake) {
      const settings = await chrome.storage.local.get();
      // If storage was empty (first installation), define default settings
      if (typeof settings.appendComponentStack !== 'boolean') {
        settings.appendComponentStack = true;
      }
      if (typeof settings.breakOnConsoleErrors !== 'boolean') {
        settings.breakOnConsoleErrors = false;
      }
      if (typeof settings.showInlineWarningsAndErrors !== 'boolean') {
        settings.showInlineWarningsAndErrors = true;
      }
      if (typeof settings.hideConsoleLogsInStrictMode !== 'boolean') {
        settings.hideConsoleLogsInStrictMode = false;
      }

      window.postMessage({
        source: 'react-devtools-hook-settings-injector',
        payload: {settings},
      });

      window.removeEventListener('message', messageListener);
    }
  }
}

window.addEventListener('message', messageListener);
window.postMessage({
  source: 'react-devtools-hook-settings-injector',
  payload: {handshake: true},
});