import { Chart } from './core'
import { isValue, isDefined } from './util'

Chart.prototype.axis = function() {}
Chart.prototype.axis.labels = function(labels) {
  var $$ = this.internal
  if (arguments.length) {
    Object.keys(labels).forEach(function(axisId) {
      $$.axis.setLabelText(axisId, labels[axisId])
    })
    $$.axis.updateLabels()
  }
  // TODO: return some values?
}
Chart.prototype.axis.max = function(max) {
  var $$ = this.internal,
    config = $$.config
  if (arguments.length) {
    if (typeof max === 'object') {
      if (isValue(max.x)) {
        config.axis_x_max = max.x
      }
      if (isValue(max.y)) {
        config.axis_y_max = max.y
      }
      if (isValue(max.y2)) {
        config.axis_y2_max = max.y2
      }
    } else {
      config.axis_y_max = config.axis_y2_max = max
    }
    $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true })
  } else {
    return {
      x: config.axis_x_max,
      y: config.axis_y_max,
      y2: config.axis_y2_max
    }
  }
}
Chart.prototype.axis.min = function(min) {
  var $$ = this.internal,
    config = $$.config
  if (arguments.length) {
    if (typeof min === 'object') {
      if (isValue(min.x)) {
        config.axis_x_min = min.x
      }
      if (isValue(min.y)) {
        config.axis_y_min = min.y
      }
      if (isValue(min.y2)) {
        config.axis_y2_min = min.y2
      }
    } else {
      config.axis_y_min = config.axis_y2_min = min
    }
    $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true })
  } else {
    return {
      x: config.axis_x_min,
      y: config.axis_y_min,
      y2: config.axis_y2_min
    }
  }
}
Chart.prototype.axis.range = function(range) {
  if (arguments.length) {
    if (isDefined(range.max)) {
      this.axis.max(range.max)
    }
    if (isDefined(range.min)) {
      this.axis.min(range.min)
    }
  } else {
    return {
      max: this.axis.max(),
      min: this.axis.min()
    }
  }
}

Chart.prototype.axis.types = function(types) {
  const $$ = this.internal
  if (types === undefined) {
    return {
      y: $$.config.axis_y_type,
      y2: $$.config.axis_y2_type
    }
  } else {
    if (isDefined(types.y)) {
      $$.config.axis_y_type = types.y
    }

    if (isDefined(types.y2)) {
      $$.config.axis_y2_type = types.y2
    }

    $$.updateScales()
    $$.redraw()
  }
}
