'use strict';var _extends = Object.assign || function (target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i];for (var key in source) {if (Object.prototype.hasOwnProperty.call(source, key)) {target[key] = source[key];}}}return target;}; // Copyright 2015-2017 Parity Technologies (UK) Ltd.
// This file is part of Parity.

// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Parity.  If not, see <http://www.gnu.org/licenses/>.

// FIXME: These should be move to dapp-develop (needs redux actions)
var _signer = require('./util/signer');
var _solidity = require('./util/solidity');var _solidity2 = _interopRequireDefault(_solidity);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}

var registerPromiseWorker = null;

try {
  registerPromiseWorker = require('promise-worker/register');

  registerPromiseWorker(function (msg) {
    return handleMessage(msg);
  });
} catch (error) {
}

self.compiler = {
  version: null,
  compiler: null };

self.files = {};

function handleMessage(message) {
  switch (message.action) {
    case 'compile':
      return compile(message.data);

    case 'load':
      return getCompiler(message.data).then(function () {return 'ok';});

    case 'setFiles':
      return setFiles(message.data);

    case 'getSignerSeed':
      return getSignerSeed(message.data);

    default:
      console.warn('unknown action "' + message.action + '"');
      return null;}

}

function getSignerSeed(data) {
  console.log('deriving seed from service-worker');var
  wallet = data.wallet,password = data.password;

  return _signer.Signer.getSeed(wallet, password);
}

function compile(data) {var
  build = data.build;

  return getCompiler(build).
  then(function (compiler) {
    console.warn('compiling');
    return _solidity2.default.compile(data, compiler);
  }).
  then(function (result) {
    console.warn('result in worker', result);
    return result;
  }).
  catch(function (error) {
    console.error('error in worker', error);
    throw error;
  });
}

function setFiles(files) {
  var prevFiles = self.files;
  var nextFiles = files.reduce(function (obj, file) {
    obj[file.name] = file.sourcecode;
    return obj;
  }, {});

  self.files = _extends({},
  prevFiles,
  nextFiles);


  return 'ok';
}

function getCompiler(build) {var
  longVersion = build.longVersion;

  if (self.compiler.version !== longVersion) {
    self.compiler.version = longVersion;
    self.compiler.compiler = _solidity2.default.
    getCompiler(build).
    then(function (compiler) {
      if (self.compiler.version === longVersion) {
        self.compiler.compiler = compiler;
      }

      return compiler;
    });
  }

  return Promise.resolve(self.compiler.compiler);
}