class MaterialRaingular.d3.Directives.PieChartModel extends AngularDirectiveModel

@inject('$timeout','$element','$attrs')
initialize: ->
  @svg        = d3.select(@$element[0])
  @chartLayer = @svg.select('g.chartLayer')
  @setSize()
  @arc        = d3.arc().outerRadius(@chartHeight / 2).innerRadius(0)
  @slices = []
  @values = []
setSize: () ->
  @options = @$scope.$eval(@$attrs.mrD3Options) || {}
  @width   = @options.width  || 960
  @height  = @options.height || 500
  @color   = @options.color  || '6b486b'
  @margin  = @options.margin || {top: 40,left: 0,bottom: 40,right: 0}
  @chartWidth  = @width - (@margin.left + @margin.right)
  @chartHeight = @height - (@margin.top + @margin.bottom)
  @svg.attr('width', @width).attr 'height', @height
  @chartLayer.attr('width', @chartWidth).attr('height', @chartHeight).attr 'transform', "translate(#{[@margin.left,@margin.top]})"

addSlice: (slice) ->
  @slices.push(slice) unless @slices.includes(slice)
  return @slices.index(slice)
removeSlice: (slice) ->
  index = @slices.indexOf(slice)
  return unless index >= 0
  @slices.splice(index,1)
  @values.splice(index,1)
  for slice in @slices
    slice.index = @slices.indexOf(slice)
  @drawChart()
changeData: (slice,value) ->
  @slices.push(slice) unless @slices.includes(slice)
  index = @slices.indexOf(slice)
  @values[index] = value
  @arcs = d3.pie().sort(null).value((d) -> d)(@values)
  @$timeout.cancel(@drawTimeout)
  @drawTimeout = @$timeout(@drawChart.bind(@),10)
  return index
drawChart: () ->
  for slice,i in @slices
    continue unless @arcs[i]
    slice.path
    .attr('d', @arc(@arcs[i]))
    slice.afterDraw?()