delegate = require('dom-delegate')
dispatcher = require('./dispatcher')
cookie = require('./cookies.coffee')
settings = require('../../../config/settings').settings

delegate = delegate(document.body)

storage =
  setItem: (key, value)->
    try
      localStorage?.setItem(key, JSON.stringify(value))
    catch e
      Rollbar?.debug("User in porn mode " + e.message)


analytics =
  auid: cookie.get('auid') || ''
  marker: cookie.get('marker') || 'direct'
  site_country: settings.host_code
  site_locale: LOCALE
  search_params: {}
  currencies: {}
  metainfo: []

window._stoyan_analytics = analytics

dispatcher.on 'start_search', (e, params) ->
  analytics.search_params = params.params
  for cb in window._analytics_callbacks.on_start_search
    try
      cb.call(analytics)
    catch e
      Rollbar?.debug("Error in analytics code: " + e.message)
      console.log("Error in analytics code: " + e.message)

dispatcher.on 'auid_restored', (e, auid) ->
  analytics.auid = auid

dispatcher.on 'marker_restored', (e, marker) ->
  analytics.marker = marker

delegate.on 'click', '[data-metainfo]', (e, el) ->
  metainfo = el.getAttribute('data-metainfo')
  analytics.metainfo = []
  try
    info = JSON.parse(metainfo)
    analytics.metainfo = info
  catch e
    Rollbar?.debug("Cannot parse metainfo: #{e.message}, metainfo: #{metainfo}")

  storage.setItem('stoyan_analytics', analytics)

  for cb in window._analytics_callbacks.on_price_click
    try
      cb.call(analytics, analytics.metainfo)
    catch e
      Rollbar?.debug("Error in analytics code: " + e.message)
      console.log("Error in analytics code: " + e.message)


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


module.exports = analytics
