const _ = require('lodash')
const axios = require('axios')
const bugsnag = require('bugsnag')
const path = require('path')
const uuid = require('uuid/v4')

/* global WIKI */

module.exports = {
  cid: '',
  enabled: false,
  init() {
    this.cid = uuid()
    bugsnag.register(WIKI.data.telemetry.BUGSNAG_ID, {
      appVersion: WIKI.version,
      autoNotify: false,
      hostname: this.cid,
      notifyReleaseStages: ['production'],
      packageJSON: path.join(WIKI.ROOTPATH, 'package.json'),
      projectRoot: WIKI.ROOTPATH,
      useSSL: true
    })
    bugsnag.onBeforeNotify((notification, originalError) => {
      if (!this.enabled) { return false }
    })

    if (_.get(WIKI.config, 'logging.telemetry', false) === true) {
      this.enabled = true
    }

    return this
  },
  sendError(err) {
    bugsnag.notify(err, { userId: this.cid })
  },
  sendEvent(eventCategory, eventAction, eventLabel) {
    if (!this.enabled) { return false }
    axios({
      method: 'post',
      url: WIKI.data.telemetry.GA_REMOTE,
      headers: {
        'Content-type': 'application/x-www-form-urlencoded'
      },
      params: {
        v: 1, // API version
        tid: WIKI.data.telemetry.GA_ID, // Tracking ID
        aip: 1, // Anonymize IP
        ds: 'server', // Data source
        cid: this.cid, // Client ID
        t: 'event', // Hit Type
        ec: eventCategory, // Event Category
        ea: eventAction, // Event Action
        el: eventLabel // Event Label
      }
    }).then(resp => {
      if (resp.status !== 200) {
        WIKI.logger.warn('Unable to send analytics telemetry request.')
      }
    }, err => {
      WIKI.logger.warn('Unable to send analytics telemetry request.')
    })
  }
}