"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

function _react() {
  const data = _interopRequireDefault(require("react"));

  _react = function _react() {
    return data;
  };

  return data;
}

function _assetBase() {
  const data = _interopRequireDefault(require("@ddn/asset-base"));

  _assetBase = function _assetBase() {
    return data;
  };

  return data;
}

var _crypto = _interopRequireDefault(require("../utils/crypto"));

var _slots = _interopRequireDefault(require("../time/slots"));

var _config = require("../config");

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

function createPluginAsset(_x, _x2, _x3, _x4) {
  return _createPluginAsset.apply(this, arguments);
}

function _createPluginAsset() {
  _createPluginAsset = _asyncToGenerator(function* (trsType, assetInfo, secret, secondSecret) {
    const keys = _crypto.default.getKeys(secret);

    const transaction = {
      type: trsType,
      nethash: _config.config.nethash,
      amount: assetInfo.amount ? `${assetInfo.amount}` : '0',
      fee: '',
      recipientId: assetInfo.recipientId ? assetInfo.recipientId : null,
      senderPublicKey: keys.publicKey,
      timestamp: _slots.default.getTime() - _config.config.clientDriftSeconds,
      message: assetInfo.message ? `${assetInfo.message}` : null,
      asset: {}
    }; // 整理 amount，recipientId，message 字段

    delete assetInfo.amount;
    delete assetInfo.recipientId;
    delete assetInfo.message; // 整理资产自己的数量

    if (assetInfo.aobAmount) {
      assetInfo.amount = assetInfo.aobAmount;
      delete assetInfo.aobAmount;
    }

    const assetJsonName = _assetBase().default.Utils.getAssetJsonName(trsType);

    transaction.asset[assetJsonName] = assetInfo; // 计算资产费用
    // fixme: 这里的 fee 应该与对应的 trsType 对应，不然就是默认 send 交易费用
    // const fee = assetInfo.fee || constants.net.fees.transfer;
    // delete assetInfo.fee;

    if (assetInfo.fee) {
      transaction.fee = assetInfo.fee;
      delete assetInfo.fee;
    } else {
      transaction.fee = yield _crypto.default.getFee(transaction);
    }

    transaction.signature = yield _crypto.default.sign(transaction, keys);

    if (secondSecret) {
      const secondKeys = _crypto.default.getKeys(secondSecret);

      transaction.sign_signature = yield _crypto.default.secondSign(transaction, secondKeys);
    }

    transaction.id = yield _crypto.default.getId(transaction);
    return transaction;
  });
  return _createPluginAsset.apply(this, arguments);
}

var _default = {
  createPluginAsset
};
exports.default = _default;