class app.views.MessageView extends Backbone.View
  initialize: =>
    @parent_view = @options['parent_view']

  events:
    "click .add": "add_tag"
    "click .tag": "remove_tag"
    "click .display": "set_display"
    "change .cb": "set_display_cb"

  maxDisplay = (count,max) ->
    if count >= max
      $(".cbox").not('.active').addClass('disabled')
      $(".displayError").hide().removeClass('active')
      $("#submit_tags_and_next").prop("disabled",false).removeClass("btn-disabled")
    else
      $(".cbox").removeClass('disabled')
      $(".displayError").show().addClass('active')
      $("#submit_tags_and_next").prop("disabled",true).addClass("btn-disabled")

  updateCount = (taggedCount) ->
    messageCount = $("li.messageCount").attr("value")
    $("li.taggedCount").attr("value",taggedCount).addClass("changed")
    $("li.taggedCount p").text(taggedCount)
    percent = ((taggedCount / messageCount) * 100)
    percent = Math.floor(percent)
    $("li.percent p").text(percent)


  render: =>
    if @model.get('subject').length > 51
      subject = @model.get('subject').substr(0,51).concat('...')
    else
      subject = @model.get('subject')
    html = _.template $("#message_template").html(),
      subject: subject
      date_sent: @model.get('date_sent_formatted')
      url: @model.get('url')
      tags: @model.get('tags')
    @$el.html html
    if @model.get('tags').length > 0
      @$el.find("div.message").addClass("tagged")
    if @model.get('represents_feed')
      @$el.find('.cb').prop('checked', true)
      @$el.find('.cbox').addClass('active')
    @
   

  add_tag: (evt) =>
    $btn = $(evt.currentTarget)
    $input = $btn.prev()
    $message = $btn.parents("div.message")
    tag = $input[0].value
    if @model.add_tag(tag)
      html = '<li><span class="tag" tag="' + tag + '">' + tag + ' <i class="fa fa-times"></i></span></li>'
      @$el.find('.tagList').append(html)
      @$el.find('.notTagged').remove()
    if @model.get('tags').length == 1
      taggedCount = $("li.taggedCount").attr("value")
      $message.addClass("tagged")
      taggedCount++
      updateCount(taggedCount)
    $("#updateAlpha").prop("disabled", false)
    @

  remove_tag: (evt) =>
    badge = $(evt.currentTarget)
    tag = badge.attr('tag')
    $message = badge.parents("div.message")
    @model.remove_tag(tag)
    badge.remove()
    if @model.get('tags').length == 0
      $message.removeClass("tagged")
      $message.find(".tagList").append('<span class="notTagged">Not Tagged.</span>')
      taggedCount = $("li.taggedCount").attr("value")
      taggedCount--
      updateCount(taggedCount)
    $("#updateAlpha").prop("disabled", false)
    @

  set_display: (evt) =>
    if $(evt.currentTarget).find(".cbox").hasClass('disabled') then return
    displayCount = $('li.displayCount').attr('value')
    @$el.find('.cbox').toggleClass('active')
    cb = @$el.find('.cb')
    if cb.is(':checked')
      displayCount--
      cb.prop('checked', false)
    else
      displayCount++
      cb.prop('checked', true) 
    maxDisplay(displayCount,5)
    $('li.displayCount').attr('value',displayCount)
    $('li.displayCount p').text("#{displayCount}/5")
    $('li.displayCount').addClass('changed')
    $("#updateAlpha").prop("disabled", false)   

  is_set_for_display: ->
    cb = @$el.find('.cb')
    cb.is(':checked')

  get_tag_changes: ->
    @model.get_tag_changes()

  reset_tags: ->
    @model.reset_tags()


class app.views.MessagesView extends Backbone.View

  initialize_message_views: =>
    @message_views = []
    @collection.models.forEach (msg) =>
      mv = new app.views.MessageView
        model:msg,
        parent_view:@
      @message_views.push mv

  render: =>
    $container = $('#messageWrapper')
    _.each @message_views, (mv) =>
      mv.render()
      $container.append mv.el


class app.views.DistributionListView extends app.views.MessagesView
  events:
    "click #submit_tags_and_next": "submit_tags"

  submit_tags: (evt) =>
    data = {}
    data['csrfmiddlewaretoken'] = $('input[name="csrfmiddlewaretoken"]')[0].value
    display_messages = [];
    for mv, i in @message_views
      message_id = mv.model.get('client_message_id')
      if mv.is_set_for_display()
        display_messages.push message_id
      tag_changes = mv.get_tag_changes()
      if tag_changes != false
        data['message_'+i] = mv.model.get('client_message_id')
        data['tags_'+i] = tag_changes
    data['display_messages'] = display_messages.join('::')
    $.post '/monitoring/' + app.monitoring_feed_id + '/tag/', data,
      (data, textStatus, jqXHR) =>
        @tags_submitted()

  tags_submitted: =>
    for mv in @message_views
      mv.reset_tags()
    window.location.reload()
