import { Chart } from './core'
import { isIE } from './util'

Chart.prototype.show = function(targetIds, options) {
  var $$ = this.internal,
    targets

  targetIds = $$.mapToTargetIds(targetIds)
  options = options || {}

  $$.removeHiddenTargetIds(targetIds)
  targets = $$.svg.selectAll($$.selectorTargets(targetIds))

  targets
    .transition()
    .style('display', isIE() ? 'block' : 'initial', 'important')
    .style('opacity', 1, 'important')
    .call($$.endall, function() {
      targets.style('opacity', null).style('opacity', 1)
    })

  if (options.withLegend) {
    $$.showLegend(targetIds)
  }

  $$.redraw({
    withUpdateOrgXDomain: true,
    withUpdateXDomain: true,
    withLegend: true
  })
}

Chart.prototype.hide = function(targetIds, options) {
  var $$ = this.internal,
    targets

  targetIds = $$.mapToTargetIds(targetIds)
  options = options || {}

  $$.addHiddenTargetIds(targetIds)
  targets = $$.svg.selectAll($$.selectorTargets(targetIds))

  targets
    .transition()
    .style('opacity', 0, 'important')
    .call($$.endall, function() {
      targets.style('opacity', null).style('opacity', 0)
      targets.style('display', 'none')
    })

  if (options.withLegend) {
    $$.hideLegend(targetIds)
  }

  $$.redraw({
    withUpdateOrgXDomain: true,
    withUpdateXDomain: true,
    withLegend: true
  })
}

Chart.prototype.toggle = function(targetIds, options) {
  var that = this,
    $$ = this.internal
  $$.mapToTargetIds(targetIds).forEach(function(targetId) {
    $$.isTargetToShow(targetId)
      ? that.hide(targetId, options)
      : that.show(targetId, options)
  })
}
