import * as process from 'process'

/**
 * easy high resolution time measurement
 */
export class HrtMeasurement {
  nanoSeconds: number = null
  milliSeconds: number = null
  private _hrTimeStart = null
  private _hrTimeStopDiff = null
  private _started: boolean = false

  /**
   * start the measurement
   */
  start () {
    this._started = true
    this._hrTimeStart = process.hrtime()
  }

  /**
   * stop the measurement
   */
  stop () {
    if (this._started === false) {
      console.log('Hasn\'t started yet')
      return
    }
    this._hrTimeStopDiff = process.hrtime(this._hrTimeStart)
    this.nanoSeconds = (this._hrTimeStopDiff[0] * 1e9) + this._hrTimeStopDiff[1]
    this.milliSeconds = this.nanoSeconds / 1000000
    return this
  }

  /**
   * reset the measurement
   */
  reset () {
    this.nanoSeconds = null
    this.milliSeconds = null
    this._hrTimeStart = null
    this._hrTimeStopDiff = null
    this._started = false
  }
}
