moment = require('moment')
_ = require('lodash')
search_re = /^(\w)(\w{3})(\d{4})(\w)?(\w{3})?(\d{4})?(\w)(\d)(\d)?(\d)?$/i
#  window.location.pathname.split('/').slice(-1)[0].match(search_re)
#  ["ABKK2609ACDG3009Y321", "A", "BKK", "2609", "A", "CDG", "3009", "Y", "3", "2", "1"]
#           0                1    2       3      4      5     6       7   8     9   10

prepare_date = (date_array) ->
  result = _.map(date_array, (i) -> "#{i}")
  for index in [1, 2]
    if result[index].length == 1
      result[index] = '0' + result[index]

  result.join('-')

parse_date = (date_match) ->
  min_date = moment().hour(0).minute(0).second(0).subtract(1, 'days')
  current_year = min_date.year()
  date = moment("#{date_match}#{current_year}", 'DDMMYYYY')
  date.add(1, 'years') if date.dayOfYear() < min_date.dayOfYear()
  formatted_date = [date.year(), date.month() + 1, date.date()]

module.exports = (pathname) ->
  match = pathname.split('/').slice(-1)[0].match(search_re)
  return {} if !match

  parsed_params = {}


  segments = []
  first_origin = null


  iata = match[2]
  formatted_date = parse_date(match[3])

  first_origin = iata
  segments.push({
    origin: iata
    date: prepare_date(formatted_date)
    destination: match[5]
  })

  if match[6]
    formatted_date = parse_date(match[6])

    segments.push({
      origin: match[5]
      destination: first_origin
      date: prepare_date(formatted_date)
    })

  parsed_params.segments = segments
  parsed_params.trip_class = match[7]
  parsed_params.passengers =
    adults: +match[8]
    children: +match[9] or 0
    infants: +match[10] or 0

  parsed_params.with_request = true
  parsed_params
