import { Chart } from './core'

Chart.prototype.resize = function(size) {
  var $$ = this.internal,
    config = $$.config
  config.size_width = size ? size.width : null
  config.size_height = size ? size.height : null
  this.flush()
}

Chart.prototype.flush = function() {
  var $$ = this.internal
  $$.updateAndRedraw({
    withLegend: true,
    withTransition: false,
    withTransitionForTransform: false
  })
}

Chart.prototype.destroy = function() {
  var $$ = this.internal

  window.clearInterval($$.intervalForObserveInserted)

  if ($$.resizeTimeout !== undefined) {
    window.clearTimeout($$.resizeTimeout)
  }

  if (window.detachEvent) {
    window.detachEvent('onresize', $$.resizeIfElementDisplayed)
  } else if (window.removeEventListener) {
    window.removeEventListener('resize', $$.resizeIfElementDisplayed)
  } else {
    var wrapper = window.onresize
    // check if no one else removed our wrapper and remove our resizeFunction from it
    if (wrapper && wrapper.add && wrapper.remove) {
      wrapper.remove($$.resizeFunction)
    }
  }

  // Removes the inner resize functions
  $$.resizeFunction.remove()

  // Unbinds from the window focus event
  $$.unbindWindowFocus()

  $$.selectChart.classed('c3', false).html('')

  // MEMO: this is needed because the reference of some elements will not be released, then memory leak will happen.
  Object.keys($$).forEach(function(key) {
    $$[key] = null
  })

  return null
}
