import { ChartInternal } from './chart-internal'

/**
 * The Chart class
 *
 * The methods of this class is the public APIs of the chart object.
 */
export function Chart(config) {
  this.internal = new ChartInternal(this)
  this.internal.loadConfig(config)

  this.internal.beforeInit(config)
  this.internal.init()
  this.internal.afterInit(config)

  // bind "this" to nested API
  ;(function bindThis(fn, target, argThis) {
    Object.keys(fn).forEach(function(key) {
      target[key] = fn[key].bind(argThis)
      if (Object.keys(fn[key]).length > 0) {
        bindThis(fn[key], target[key], argThis)
      }
    })
  })(Chart.prototype, this, this)
}
