# //= require material_raingular/directives/destroy/directive class MrDestroyModel extends AngularLinkModel

REPEAT_TYPES: ['ng-repeat','ng-repeat-start','md-virtual-repeat']
REGEXP: /^\s*(.*?)\s+in\s+(.*?)(?:\s+track\s+by\s+([\s\S]+?))?$/
  # 1: model name
  # 2: collection name
  # 3: track by value
@inject(
  '$parse'
  'factoryName'
  '$timeout'
)
initialize: ->
  @_setForm()
  @$element.bind 'click', @destroy
  @_resourcify()
@register(Directives.MrDestroy)
_resourcify: ->
  ActiveRecord.$Resource._resourcify(@_model(),@_factory())

destroy: =>
  return if @$attrs.disabled || @form.disabled
  @_resourcify()
  @$timeout => @_list().drop(@_model())
  factory = @$injector.get(@_options().factory || @factoryName(@_matchedExpression()[1]))
  @_model().$destroy @_callBack

_callBack: (data)   => @$controller[1]?.evaluate(data)
_model:             -> @$controller[0].$viewValue
_list:              -> @_options().list || @$scope.$eval(@_matchedExpression()[2].split('|')[0])
_options:           -> @$scope.$eval(@$attrs.mrOptions || '{}')
_factory:           -> @_options().factory || @_matchedExpression()[1].classify()
_matchedExpression: -> @_repeatStatement().match(@REGEXP)
_repeatStatement:   -> (@REPEAT_TYPES.map (type) => @_repeatElement().getAttribute(type)).$inject('|')
_repeatElement: ->
  repeatElement = @$element[0]
  until (@REPEAT_TYPES.map (type) => repeatElement.hasAttribute(type)).$inject('|')
    repeatElement = repeatElement.parentElement
    break if !repeatElement
  repeatElement
_setForm: ->
  @form = @$element[0]
  until @form.nodeName == 'FORM' || !@form
    @form = @form.parentNode
    break if !@form
  @form ||= @$element[0]