#example:
#date_formatter = require('../../common/js/date_formatter.coffee')
#date_formatter.form_date(+new Date())

_ = require('lodash')
moment = require('moment')

moment.locale(LOCALE)

_cache = {}

default_formatter = (ts)->
  moment.utc(ts).format()

defaults =
  form_date: default_formatter

  ticket_date: default_formatter
  non_localized_date: default_formatter

  ticket_time: (ts) ->
    dt = new Date(ts * 1000)
    hours = dt.getUTCHours()
    minutes = dt.getUTCMinutes()
    "#{if hours < 10 then "0#{hours}" else hours}:#{if minutes < 10 then "0#{minutes}" else minutes}"

  flight_time_filter: (date_string) ->
    moment(date_string).format('D MMMM')

  format_duration: (duration) ->
    units = __('durations')
    parts = [Math.floor(duration / 60), duration % 60]
    result = ''
    for index, val of parts
      result += ' ' + "#{val}".slice(-2) + units[index] if val > 0
    result

  format_transfer_duration: (duration) ->
    units = __('durations')
    "#{Math.floor(duration / 60)}".slice(-2) + "#{units[0]} " + "00#{duration % 60}".slice(-2) + units[1]

  flight_time_format_duration_with_units: (duration) ->
    units = __('durations')
    hours = ''
    if duration >= 60
      hours = "#{Math.floor(duration / 60)}".slice(-2) + "#{units[0]} "
    minutes = "#{duration % 60}".slice(-2) + units[1]
    hours + minutes

  format_time_from_timestamp: (ts) ->
    moment.utc(ts * 1000).format('LT')

  format_time_from_h_m_string: (s) ->
    moment(s, 'hh:mm').format('LT')

module.exports = _.assign(defaults, (objectValue, fn, key)->
  _cache[key] = {}
  (ts)->
    if !_cache[key][ts]
      _cache[key][ts] = fn(ts)
    _cache[key][ts]
)
