_                 = require('lodash')
dispatcher        = require('../../common/js/dispatcher')
cookies           = require('../../common/js/cookies.coffee')
moment            = require('moment')
delegate          = require('dom-delegate')
utils             = require('../../common/js/utils.coffee')
styles_modifier   = require('../../common/js/styles_modifier.coffee')

FUTUTE_DEPART_DAYS = 14
SCROLL_TOP_SPEED = 300

original_state =
  no_click: true
  depart_later: false
  empty_email: !cookies.get('subscriber_email')
  shown_in_past: !!cookies.get('subscriptions_shown')
  shown_in_session: false
  search_finished: false

state = _.clone(original_state)

depart_later_future = (dt) ->
  Math.abs(moment().diff(moment(dt), 'days')) >= FUTUTE_DEPART_DAYS

set_show_cookie = ->
  current_date = new Date()
  current_date.setMonth(current_date.getMonth() + 1)
  cookies.set('subscriptions_shown', 'true', current_date.toGMTString())

dispatcher.on 'search_finished', ->
  state.search_finished = true

timer = null
dispatcher.on 'start_search', (e, params) ->
  state.no_click = true
  state.search_finished = false
  state.depart_later = depart_later_future(params.params.segments[0].date)

event_delegate = delegate(document.body)
event_delegate.on('click', '[is="search_results"]', (event) ->
  state.no_click = false
  return true
)

background_elem = document.getElementById('subs_background')
popop_elem = document.getElementById('subs_popup')
subscriptions_elem = document.getElementById('subscriptions')
html_element = document.getElementsByTagName("html")[0]

show_subscriptions = ->
  styles_modifier(subscriptions_elem).add('active')
  styles_modifier(background_elem).add('active')
  styles_modifier(popop_elem).add('active')
  styles_modifier(html_element).add('no-scroll')

window.hide_subscriptions = ->
  styles_modifier(subscriptions_elem).remove('active')
  styles_modifier(background_elem).remove('active')
  styles_modifier(popop_elem).remove('active')
  styles_modifier(html_element).remove('no-scroll')

document.addEventListener "mouseout", _.throttle((e, t) ->
  e = e ? e : window.event
  from = e.relatedTarget || e.toElement

  if _.every([
    !from,
    state.no_click,
    state.depart_later,
    state.empty_email,
    !state.shown_in_session,
    !state.shown_in_past,
    state.search_finished,
    window.subscription_widget
  ])
    state.shown_in_session = true
    set_show_cookie()
    utils.scroll_to_top(0, SCROLL_TOP_SPEED)
    setTimeout(show_subscriptions, SCROLL_TOP_SPEED)
, 20)

event_delegate.on 'click', '.js-hide-popup', (e) ->
  hide_subscriptions()
