root = exports ? this
root.Qsupplier=
  watch_events: ->
    faye = new Faye.Client(event_host)
    faye.subscribe "/supplier/#{supplier_object.id}", (e)=>
      console.log "Event: #{e.event}"
      console.log e.data
      if(e.event == 'new_order')
        if Qsupplier.App
          Qsupplier.App.store().pushPayload(e.data)
          # Fix for ember pushPayload bug not creating the proper relations/triggers
          setTimeout ->
            if order = Qsupplier.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') isnt list
                  table.set 'active_list', list
          , 200
      else if(e.event == 'list_needs_help')
        if Qsupplier.App and list = Qsupplier.App.List.findCached(e.data.id)
          list.markNeedsHelp()
        # old stuff
        # $('#list-needs-help-indicator-'+e.data.id).removeClass('hide')
        # $('#list-is-helped-button-'+e.data.id).removeClass('hide')
        # $('.section-table-list-'+e.data.id).addClass('needs_help')
      else if(e.event == 'list_needs_payment')
        if Qsupplier.App and list = Qsupplier.App.List.findCached(e.data.id)
          list.markNeedsPayment()
        # old stuff
        $('#list-needs-payment-indicator-'+e.data.id).removeClass('hide')
        $('.section-table-list-'+e.data.id).addClass('needs_payment')
      else if(e.event == 'list_is_paid')
        if list = Qsupplier.App.List.findCached(e.data.id)
          list.markIsPaid()
      else if e.event == 'list_update'
        if Qsupplier.App
          list = Qsupplier.App.List.updateOrAdd(e.data.list)
      else if e.event == 'list_closed'
        if Qsupplier.App and list = Qsupplier.App.List.findCached(e.data.id)
          list.markClosed()
        $('.list-row-'+e.data.id).remove()
        $('.of-list-'+e.data.id).remove()
        table_list_class = 'section-table-list-'+e.data.id
        $('.'+table_list_class).removeClass('occupied needs_help needs_payment active_order').removeClass(table_list_class)
      else if e.event == 'order_closed'
        order.markClosed() if Qsupplier.App and order = Qsupplier.App.Order.findCached(e.data.id)
      else if e.event == 'list_helped'
        if Qsupplier.App and list = Qsupplier.App.List.findCached(e.data.id)
          list.markHelped()

        # list_id = e.data.id
        # $('#list-needs-help-indicator-'+list_id).addClass('hide')
        # $('#list-is-helped-button-'+list_id).addClass('hide')
        # $('.section-table-list-'+list_id).removeClass('needs_help')
      else if e.event == 'order_being_processed'
        if Qsupplier.App and order = Qsupplier.App.Order.findCached(e.data.id)
          order.markActive()
        # $('#order-in-process-button-'+e.data.id).hide()
        # $('.order-row-'+e.data.id).removeClass('placed').addClass('active')
      else if e.event == 'order_being_delivered'
        if Qsupplier.App and order = Qsupplier.App.Order.findCached(e.data.id)
          order.markDelivered()
        # $('.order-row-'+e.data.id).remove()
        # $('.section-table-list-'+e.data.list_id).removeClass('active_order')
      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'
        Qsupplier.App && Qsupplier.App.List.updateOrAdd(e.data.list)
      else if e.event == 'order_cancelled'
        if Qsupplier.App and order = Qsupplier.App.Order.findCached(e.data.id)
          order.markCancelled()
        $('.supplier-orders-placed-count-number').text(e.data.orders_placed_count) if e.data.orders_placed_count == 0 or e.data.orders_placed_count
        $('.supplier-orders-in-process-count-number').text(e.data.orders_in_process_count) if e.data.orders_in_process_count == 0 or e.data.orders_in_process_count


        # old stuff
        #list = new List(e.data.list)
        #list_row = $('.list-row-'+list.id())
        #list_row.find('.table_number').text(list.table_number()).addClass('changed')
        #list_row.find('.section_title').text(e.data.section_title)
        #order_rows = $('.of-list-'+list.id())
        #order_rows.find('.table_number').text(list.table_number()).addClass('changed')
        #order_rows.find('.section_title').text(e.data.section_title)
        ## Move properties from table in section tables view
        #window.last_data = e.data
        #from_table = $('#section-table-'+e.data.from_table_id)
        #to_table = $('#section-table-'+list.table_id())
        #if to_table.length
          #to_table.addClass('section-table-list-'+list.id())
          #to_table.addClass('occupied')
          #to_table.addClass('needs_help') if list.needs_help()
          #to_table.addClass('needs_payment') if list.needs_payment()
          #to_table.addClass('active_order') if list.has_active_orders()
        #from_table.removeClass('occupied needs_help needs_payment active_order section-table-list-'+list.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
