root = exports ? this
root.Qsupplier =
  watch_events: ->
    faye = new Faye.Client(event_host)
    faye.subscribe "/supplier/#{supplier_object.id}", (e)=>
<% if Rails.env.test? %>
      window.faye_log ||= []
      faye_message = {}
      faye_message[e.event] = JSON.parse(JSON.stringify(e.data))
      faye_log.push faye_message
<% elsif Rails.env.development? %>
      console.log "Event: #{e.event}"
      console.log e.data
<% end %>
      if e.data
        if e.data.supplier_orders_placed_count == 0 or e.data.supplier_orders_placed_count
          $('.supplier-orders-placed-count-number').text(e.data.supplier_orders_placed_count)
        if e.data.supplier_orders_in_process_count == 0 or e.data.supplier_orders_in_process_count
          $('.supplier-orders-in-process-count-number').text(e.data.supplier_orders_in_process_count)

      # if(e.event == 'new_order')
      #   if App
      #     App.store().pushPayload(e.data)
      #     # Fix for ember pushPayload bug not creating the proper relations/triggers
      #     setTimeout ->
      #       if order = App.store().all('order').findProperty('id', e.data.order.id)
      #         # console.log "Ugly ember fix for adding order #{e.data.order.id} as relation to its list"
      #         list = order.get('list')
      #         list.get('orders').addRecord order
      #         if table = list.get('table')
      #           if table.get('active_list')
      #             table.get('active_list').then (table_list)->
      #               table.set 'active_list', list if table_list isnt list
      #     , 200
      if(e.event == 'list_needs_help')
        list.markNeedsHelp() if list = App.List.findCached(e.data.id)

      else if(e.event == 'list_needs_payment')
        list.markNeedsPayment() if list = App.List.findCached(e.data.id)

      else if(e.event == 'list_is_paid')
        list.markIsPaid() if list = App.List.findCached(e.data.id)
      else if e.event == 'list_update'
        App.store().pushPayload('list', e.data)
        App.store().findById('list', e.data.list.id).then (list)->
          list.get('table').then (table)->table.set('active_list', list)

      else if e.event == 'list_closed'
        list.markClosed() if list = App.List.findCached(e.data.id)

      else if e.event == 'order_closed'
        order.markClosed() if order = App.Order.findCached(e.data.id)

      else if e.event == 'list_helped'
          list.markHelped() if list = App.List.findCached(e.data.id)

      else if e.event == 'order_being_processed'
        order.markActive() if order = App.Order.findCached(e.data.id)

      else if e.event == 'order_being_delivered'
        order.markDelivered() if order = App.Order.findCached(e.data.id)

      else if e.event == 'remove_list_needs_payment'
        if list = App.List.findCached(e.data.id)
          list.set 'needs_payment', false

      else if e.event == 'orders_in_process_count'
        $('.supplier-orders-in-process-count-number').text e.data.count
      else if e.event == 'orders_placed_count'
        $('.supplier-orders-placed-count-number').text e.data.count
      else if e.event == 'list_changed_table'
        # App && App.List.updateOrAdd(e.data.list)
        # App.store().update 'list', e.data.list
        #TODO: waiting for single source of truth
        if list = App.List.findCached(e.data.list.id)
          list.get('table').set('active_list', null)
          App.store().findById('table', e.data.list.table_id).then (new_table)->
            list.set('table', new_table)
            new_table.set('active_list', list) # making reverse association

      else if e.event == 'order_cancelled'
        order.markCancelled() if order = App.Order.findCached(e.data.id)

    false
  # move_table_to_active_section: (table_id)->
  #   table_container = $('#section-table-'+table_id)
  #   section_container = $('.section-tables-active')
  #   section_container.append(table_container)
  #   Qsupplier.position_table_in_active_section(section_container, table_container, true)
  #
  #   # Set the section id of the table in the database
  #   $.ajax(
  #     type: 'PUT',
  #     url: '/supplier/tables/'+table_container.data('table-id'),
  #     data: {table: {section_id: current_section_id}},
  #     dataType: 'json'
  #   )
  # position_table_in_active_section: (section_container, table_container, make_draggable)->
  #   make_draggable ||= false
  #   button_container = table_container.find('.action-button-container')
  #   button_container.html('')
  #   button_container.append($('<button class="btn btn-warning btn-mini">x</button>').click( -> Qsupplier.move_table_to_inactive_section(table_container.data('table-id')) ))
  #   position_x = parseFloat(table_container.data('position-x'))
  #   position_y = parseFloat(table_container.data('position-y'))
  #   table_container.css('left', section_container.width()*position_x/current_section_width)
  #   table_container.css('top', section_container.height()*position_y/current_section_height)
  #   #TODO place element at 0.0 if it happens to be outside the region
  #   table_container.show()
  #   table_container.draggable(
  #     containment: section_container,
  #     stop: ->
  #       position_x = current_section_width * $(this).position().left / section_container.width()
  #       position_y = current_section_height * $(this).position().top / section_container.height()
  #       table_container.data('position-x', position_x)
  #       table_container.data('position-y', position_y)
  #       $.ajax(
  #         type: 'PUT',
  #         url: '/supplier/tables/'+table_container.data('table-id'),
  #         data: {table: {position_x: position_x, position_y: position_y}},
  #         dataType: 'json'
  #       )
  #   ) if make_draggable
  # move_table_to_inactive_section: (table_id)->
  #   table_container = $('#section-table-'+table_id)
  #   table_container.css('left', 'auto')
  #   table_container.css('top', 'auto')
  #   section_container = $('.section-tables-inactive')
  #   section_container.prepend(table_container)
  #   button_container = table_container.find('.action-button-container')
  #   button_container.html('')
  #   button_container.append($('<button class="btn btn-primary btn-mini">+</button>').click( -> Qsupplier.move_table_to_active_section(table_container.data('table-id')) ))
  #   #TODO make ajax call safe
  #   $.ajax(
  #     type: 'PUT',
  #     url: '/supplier/tables/'+table_container.data('table-id'),
  #     data: {table: {section_id: ''}},
  #     dataType: 'json'
  #   )
  #
  # load_active_lists: () ->
  #   $.get('/supplier/active_lists.json?section_id='+($('.section_selector').val() || ''), (res) =>
  #     body = $('#active-lists-table tbody')
  #     body.find('tr').remove()
  #     foot = $('#active-lists-table tfoot')
  #     for list in res.lists
  #       body.append @mustache('#active-list-template', new List(list))
  #   )
  # mark_list_as_helped: (list_id)->
  #   $.post('/supplier/mark_list_as_helped', {list_id: list_id}, (res)->
  #   )
  # close_list: (list_id)->
  #   $.post('/supplier/close_list', {list_id: list_id}, (res)->
  #   )
  #
  # load_active_orders: () ->
  #   $.get('/supplier/active_orders.json?section_id='+($('.section_selector').val() || ''), (res) =>
  #     body = $('#active-orders-table tbody')
  #     body.html('')
  #     foot = $('#active-orders-table tfoot')
  #     return unless res.orders
  #     for order in res.orders
  #       ord = new Order(order)
  #       body.append @mustache('#active-order-template', ord)
  #   )
  # mark_order_in_process: (order_id)->
  #   $.post('/supplier/mark_order_in_process', {order_id: order_id})
  # mark_order_delivered: (order_id)->
  #   $.post('/supplier/order_is_delivered', {order_id: order_id})
  #
  # load_list: (list_id) ->
  #   $.get(data_host + '/supplier/lists/'+list_id+'.json?old_style=1', (res) ->
  #     body = $('#list-table tbody')
  #     foot = $('#list-table tfoot')
  #     Qsupplier.build_list_table(body, foot, res)
  #   )
  # build_list_table: (body, foot, res) ->
  #   body.html('')
  #   return unless res.orders
  #   for order in res.orders
  #     body.append @mustache('#list-order-template', new Order(order))
  #   foot.find('.list-total').html(currency(res.total_amount))
  # update_section_tables_view: (section_id)->
  #   $.get(data_host + '/supplier/sections/'+section_id+'/tables_view.json', (res)->
  #     for table in res.tables
  #       to = $('#section-table-'+table._id)
  #       if table.occupied then to.addClass('occupied') else to.removeClass('occupied')
  #       if table.needs_help then to.addClass('needs_help') else to.removeClass('needs_help')
  #       if table.needs_payment then to.addClass('needs_payment') else to.removeClass('needs_payment')
  #       if table.active_order then to.addClass('active_order') else to.removeClass('active_order')
  #
  #   )
  # add_tables_to_active_section: ->
  #   number_start = $('#add-tables-number-start').val()
  #   number_end = $('#add-tables-number-end').val()
  #   $.post('/supplier/sections/'+current_section_id+'/add_tables', {number_start: number_start, number_end: number_end}, -> window.location.reload())
  #   #$('#add-tables-modal').modal('hide')
  #   false
  # arrange_tables_of_active_section: ->
  #   option =  $('input[name=arrange-table-option]:checked').val()
  #   by_row_count = parseInt($('#arrange-tables-by-row-count').val())
  #   by_column_count = parseInt($('#arrange-tables-by-column-count').val())
  #   if(option == "by_row")
  #     return @alert(t('section.arrange_tables.by_row_no_row_count')) unless by_row_count && by_row_count > 0
  #   if(option == "by_column")
  #     return @alert(t('section.arrange_tables.by_column_no_column_count')) unless by_column_count && by_column_count > 0
  #   $.post '/supplier/sections/'+current_section_id+'/arrange_tables', {option: option, row_count: by_row_count, column_count: by_column_count}, (response)=>
  #     if response.ok then window.location.reload() else @alert(t(response.message))
  #   false
  # mustache: (selector, locals)->
  #   html = $(selector).html()
  #   return '' unless html
  #   template = Handlebars.compile(html)
  #   container = $('<div></div>')
  #   container.html(template(locals))
  #   setTranslations(container)
  #   return container.html()
  #   locs = $.extend(locals,
  #     currency: ->
  #       (val)->
  #         currency(Mustache.render(val, this))
  #   )
  #   Mustache.to_html(html, locs)
  # alert: Qwaiter.alert
