/* global chrome */

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  sendResponse(message);
});

const testMap = {
  connect () {
    let success = false;
    try {
      chrome.runtime.connect(chrome.runtime.id);
      chrome.runtime.connect(chrome.runtime.id, { name: 'content-script' });
      chrome.runtime.connect({ name: 'content-script' });
      success = true;
    } finally {
      console.log(JSON.stringify(success));
    }
  },
  getManifest () {
    const manifest = chrome.runtime.getManifest();
    console.log(JSON.stringify(manifest));
  },
  sendMessage (message) {
    chrome.runtime.sendMessage({ method: 'sendMessage', args: [message] }, response => {
      console.log(JSON.stringify(response));
    });
  },
  executeScript (code) {
    chrome.runtime.sendMessage({ method: 'executeScript', args: [code] }, response => {
      console.log(JSON.stringify(response));
    });
  },
  connectTab (name) {
    chrome.runtime.onConnect.addListener(port => {
      port.onMessage.addListener(message => {
        console.log([port.name, message].join());
      });
    });
    chrome.runtime.sendMessage({ method: 'connectTab', args: [name] });
  },
  update (tabId, props) {
    chrome.runtime.sendMessage({ method: 'update', args: [tabId, props] }, response => {
      console.log(JSON.stringify(response));
    });
  }
};

const dispatchTest = (event) => {
  const { method, args = [] } = JSON.parse(event.data);
  testMap[method](...args);
};

window.addEventListener('message', dispatchTest, false);
