# @ts-check

import press_click from './click'
import press_includes from './includes'
import press_replace from './replace'
import press_split from './split'
import press_toLowerCase from './toLowerCase'
import press_trim from './trim'

press_formatInputPress =
###* @type import('./press').Press1 ###
(listInput) ->

  ###* @type string[] ###
  press_listKey = []

  for press_input in listInput

    press_ipt = press_toLowerCase press_input
    press_ipt = press_replace press_ipt, ' ', ''
    press_ipt = press_replace press_ipt, '-', ''

    press_listKey.Push (press_split press_ipt, '+')...

  return press_listKey

press_validateInputPress =
###* @type import('./press').Press2 ###
(listInput) ->

  unless listInput.Length()
    return false

  press_key = listInput[0]
  if press_includes press_key, '-button'
    press_key = press_replace press_key, 'l-button', 'left'
    press_key = press_replace press_key, 'm-button', 'middle'
    press_key = press_replace press_key, 'r-button', 'right'
    press_click press_key
    return false

  return true

###* @type import('./press').Press ###
export default (listInput...) ->

  unless press_validateInputPress listInput then return

  press_listKey = press_formatInputPress listInput

  # unfold
  press_listResult = []
  press_len = press_listKey.Length()
  for press_key, press_i in press_listKey
    # last
    if press_i == press_len - 1
      press_listResult[press_i] = press_split press_key, ':'
      continue
    # other
    if press_includes press_key, ':'
      press_listResult[press_i] = press_split press_key, ':'
      press_listResult[(press_len - 1) * 2 - press_i] = press_split press_key, ':'
    else
      press_listResult[press_i] = [press_key, 'down']
      press_listResult[(press_len - 1) * 2 - press_i] = [press_key, 'up']

  # alias & join
  for press_it, press_i in press_listResult
    if press_it[0] == 'win'
      press_it[0] = 'lwin'
    press_listResult[press_i] = press_trim "#{press_it[0]} #{press_it[1]}"

  # execute
  press_result = ''
  for press_it in press_listResult
    press_result = "#{press_result}{#{press_it}}"
  Native 'Send, % press_result'
  return