"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.flush = flush;
exports.setSegmentNodeKey = setSegmentNodeKey;
exports.setUserProperties = setUserProperties;
exports.setVersionName = setVersionName;
exports.logEvent = logEvent;

function _os() {
  const data = _interopRequireDefault(require("os"));

  _os = function () {
    return data;
  };

  return data;
}

function _analyticsNode() {
  const data = _interopRequireDefault(require("analytics-node"));

  _analyticsNode = function () {
    return data;
  };

  return data;
}

function _ip() {
  const data = _interopRequireDefault(require("./ip"));

  _ip = function () {
    return data;
  };

  return data;
}

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

let _segmentNodeInstance;

let _userId;

let _version;

const PLATFORM_TO_ANALYTICS_PLATFORM = {
  darwin: 'Mac',
  win32: 'Windows',
  linux: 'Linux'
};

function flush() {
  if (_segmentNodeInstance) _segmentNodeInstance.flush();
}

function setSegmentNodeKey(key) {
  // Do not wait before flushing, we want node to close immediately if the programs ends
  _segmentNodeInstance = new (_analyticsNode().default)(key, {
    flushInterval: 300
  });
}

function setUserProperties(userId, traits) {
  _userId = userId;

  if (_segmentNodeInstance) {
    _segmentNodeInstance.identify({
      userId,
      traits,
      context: _getContext()
    });
  }
}

function setVersionName(version) {
  _version = version;
}

function logEvent(name, properties = {}) {
  if (_segmentNodeInstance && _userId) {
    _segmentNodeInstance.track({
      userId: _userId,
      event: name,
      properties,
      context: _getContext()
    });
  }
}

function _getContext() {
  let platform = PLATFORM_TO_ANALYTICS_PLATFORM[_os().default.platform()] || _os().default.platform();

  let context = {
    ip: _ip().default.address(),
    device: {
      model: platform,
      brand: platform
    },
    os: {
      name: platform,
      version: _os().default.release()
    },
    app: {}
  };

  if (_version) {
    context.app = {
      version: _version
    };
  }

  return context;
}
//# sourceMappingURL=__sourcemaps__/Analytics.js.map