delegate                   = require('dom-delegate')
dispatcher                 = require('../../common/js/dispatcher')
template                   = require('./average_prices.temple')
filters                    = require('../../common/js/filters.coffee')
utils                      = require('../../common/js/utils.coffee')
metrics                    = require('../../common/js/metrics.coffee')
temple_utils               = require('temple-wat')
module.exports = (wrapper_average_prices) ->
  KEYS = ['direct', 'not_direct']

  model =
    currency: 'rub'
    currencies: {}
    average_prices: []
    month: null

  view =
    average_prices: []
    deeplink: 'http://www.aviasales.ru/'
    month_title: ''

  event_delegate = delegate(wrapper_average_prices)
  pool = temple_utils.pool(template)

  MONTH_NAMES = __('datepicker.months')
  TITLE_MAP =
    direct: __('average_prices.direct')
    not_direct: __('average_prices.not_direct')

  dispatcher.on('start_search', (event, {request_id, params}) ->
    model.month = +params.segments[0].date.split('-')[1]
    model.average_prices = []
    view.average_prices = []
    view.deeplink = utils.build_calendar_deeplink(params, 'eap')
    while wrapper_average_prices.firstChild
      wrapper_average_prices.removeChild(wrapper_average_prices.firstChild)
  )

  dispatcher.on('currencies_updated', (event, {request_id, currencies}) ->
    model.currencies = currencies
  )

  dispatcher.on('currency_updated', (event, currency) ->
    model.currency = currency
    if view.average_prices.length
      for index, block of view.average_prices
        price_in_currency = Math.round(model.average_prices[index].price / model.currencies[model.currency])
        block.price = filters.split_price(price_in_currency)
        block.currency = model.currency

      while wrapper_average_prices.firstChild
        wrapper_average_prices.removeChild(wrapper_average_prices.firstChild)
      wrapper_average_prices.appendChild(pool.get('average_prices', view)[0])
  )

  dispatcher.on('average_prices_updated', (event, {request_id, average_prices}) ->
    for name in KEYS
      continue if !average_prices[name]
      model.average_prices.push({price: average_prices[name], name: name})
  )

  dispatcher.on('first_tickets_arrived', (event, {request_id}) ->
    if model.average_prices.length
      view.average_prices = []
      view.month_title = __('average_prices.title') + " #{MONTH_NAMES[model.month]}"
      for price_info, index in model.average_prices
        value = price_info.price
        continue if !value
        price_in_currency = Math.round(value / model.currencies[model.currency])

        view.average_prices.push({
          first_child: if index == 0 then 'first-child' else ''
          center_class: ''
          price: filters.split_price(price_in_currency)
          currency: model.currency
          title: TITLE_MAP[price_info.name]
        })

      if view.average_prices.length == 1
        view.average_prices[0].center_class = 'average_prices-center'
      wrapper_average_prices.appendChild(pool.get('average_prices', view)[0])
  )

  event_delegate.on('click', '.js-average_prices-link', (event, event_target) ->
    metrics.reach_goal('AVERAGE_PRICES_RIGHT_COLUMN_CLICK')
  )
