import EventsEmitter from 'EventsEmitter'

export default class EventTool extends EventsEmitter {
  constructor (viewer) {
    super()

    this.viewer = viewer

    this.toolName = this.guid()

    viewer.toolController.registerTool(this)
  }

  /// //////////////////////////////////////////////////////
  // Tool names
  //
  /// //////////////////////////////////////////////////////
  getNames () {
    return [this.getName()]
  }

  /// //////////////////////////////////////////////////////
  // Tool name
  //
  /// //////////////////////////////////////////////////////
  getName () {
    return this.toolName
  }

  /// //////////////////////////////////////////////////////
  // Tool Priority
  //
  /// //////////////////////////////////////////////////////
  getPriority () {
    return 1000
  }

  /// //////////////////////////////////////////////////////
  // Activate Tool
  //
  /// //////////////////////////////////////////////////////
  activate () {
    if (!this.active) {
      this.active = true

      this.viewer.toolController.activateTool(
        this.toolName)

      this.emit('activate', this)
    }
  }

  /// //////////////////////////////////////////////////////
  // Deactivate tool
  //
  /// //////////////////////////////////////////////////////
  deactivate () {
    if (this.active) {
      this.active = false

      this.viewer.toolController.deactivateTool(
        this.toolName)

      this.emit('deactivate', this)
    }
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleSingleClick (event, button) {
    return this.emit('singleclick', event, button)
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleDoubleClick (event, button) {
    return this.emit('doubleclick', event, button)
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleMouseMove (event) {
    return this.emit('mousemove', event)
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleWheelInput (event) {
    return this.emit('mousewheel', event)
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleGesture (event) {
    return this.emit('gesture', event)
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleKeyDown (event, keyCode) {
    return this.emit('keydown', event, keyCode)
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleButtonDown (event, button) {
    return this.emit('buttondown', event, button)
  }

  /// //////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////
  handleButtonUp (event, button) {
    return this.emit('buttonup', event, button)
  }
}
