class AjaxCatTranslation

cur_position: false
experiment: false
param_suggestion: true

constructor: ->
  @now = Date.now()
  $('#new-experiment-modal').hide()
  $("#send-experiment").hide()
  @suggestions = new Suggestions(@)
  $('#translation-preview-modal').hide()
  $('#myTab').tab('show')
  @hash = window.location.hash.substr(1)
  data = localStorage.getItem(@hash)
  unless data
    alert "No such document."
    return
  @doc = JSON.parse(data)
  @prepare_test() if @doc.task_id
  @pair = @doc.pair
  $('h1').html("#{@doc.name} <small>#{@pair}</small>")
  $("title").html("#{@doc.name} - AJAX-CAT")
  i = 0
  for s in @doc.source
    $("#source-top").append("<span class='ac-element ac-source' data-position='#{i}'>#{s}</span>")
    $("#source-bottom").append("<span class='ac-element ac-source' data-position='#{i}'>#{s}</span>")
    i += 1
  i = 0
  for t in @doc.target
    t = "" unless t
    $("#target-top").append("<span class='ac-element ac-target' data-position='#{i}'>#{t}</span>")
    $("#target-bottom").append("<span class='ac-element ac-target' data-position='#{i}'>#{t}</span>")
    i += 1
  $('.ac-element').click(
    (event) =>
      position = $(event.target).data('position')
      @change_position(position)
  )
  @length = $("#source-top").children().length
  @change_position(0)
  @bind_events()
  @resize()

time: =>
  sec = parseInt((Date.now() - @now) / 1000)
  t = "time from start: #{parseInt(sec / 60)}:#{sec % 60}"
  $("#time").html(t)
  setTimeout(@time, 10)

change_experiment_sentence: =>
  if @cur_position + 1 < @doc.source.length
    @change_position(@cur_position + 1)
  else
    $("#send-experiment").hide()
    $.ajax "/admin/save_experiment"
      data:
        "log_id": @doc.task_id
        log: JSON.stringify(@doc)
      type: "post"
      success: =>
        alert "Experiment saved."
        window.location = "/"
      error: =>
        alert "Could not save experiment."

prepare_test: =>
  AjaxCatList.delete_document(@hash)
  @experiment = true
  $("#save").hide()
  $("#experiment-settings").show()
  $("#top-translations").hide()
  $("#bottom-translations").hide()
  $("#send-experiment").show()
  $("#send-experiment").click(
    =>
      @change_experiment_sentence()
  )
  @doc.log = []
  @time()
  $("#log").append("<h2>Log</h2>")

log: (type = false, param = false) =>
  return unless @doc.task_id
  new_log = (
    time: Date.now()
    target: $("#target-sentence").val()
  )
  new_log.type = type if type
  new_log.param = param if param
  if @doc.log[@cur_position] == undefined
    @doc.log[@cur_position] = []
  @doc.log[@cur_position].push(new_log)
  $("#log").append(JSON.stringify(new_log) + "<br>")

resize: =>
  width = $(window).width()
  $("#translation-table-container").width(width - 60)

bind_events: =>
  $("#target-sentence").on('keyup',
    =>
      #@log()
  )
  $("#target-sentence").on('click',
    =>
      #@log()
  )
  $("#target-sentence").on('keydown'
    (event) =>
      @log("keydown", event.which)
      switch event.which
        when 13 #enter
          @suggestions.take_suggestion()
        when 32 #space
          text = $("#target-sentence").val()
          text = Utils.trim text
          if text.length > 0
            ar = text.split(/[ ]+/)
            word = ar[(ar.length - 1)]
            @table.mark_words(word)
        when 33 #pgup
          @change_position(@cur_position - 1) if @cur_position > 0
          return false
        when 34 #pgdown
          @change_position(@cur_position + 1) if (@cur_position + 1) < @length
          return false
        when 38 #up
          @suggestions.up()
        when 40 #down
          @suggestions.down()
        else
          $(window).trigger('loadSuggestions')

  )

  $("#preview").click(
    =>
      @save_target()
      @show_preview()
      return false
  )

  $("#save").click(
    =>
      @save_target()
      alert "Translation was saved into your browser."
  )

show_preview: =>
  $("#source").text(@doc.source.join(''))
  $("#target").text(@doc.target.join(''))
  $('#translation-preview-modal').modal('show')

save_target: =>
  $("#target-top .ac-target[data-position=#{@cur_position}]").text($("#target-sentence").val())
  $("#target-bottom .ac-target[data-position=#{@cur_position}]").text($("#target-sentence").val())

  tar = []
  for el in $("#target-top .ac-target")
    tar.push($(el).text())
  @doc.target = tar
  localStorage.setItem(@doc.id, JSON.stringify(@doc))

load_translation_table: (sentence) =>
  @table_request.abort() if @table_request
  sentence = Utils.tokenize(sentence)
  if sentence.match(/^[\ \t]*$/)
    $("#translation-table-container").html("")
    @suggestions.clear()
    return
  $("#translation-table-container").text("")
  @table_request = $.ajax "/api/table"
    data:
      pair: @pair
      q: sentence
    success: (data) =>
      @log("translation_table_loaded", data)
      @table = new TranslationTable(@, data)
      $("#translation-table-container").html(@table.get_table())
      $(window).trigger('loadSuggestions')
    error: =>
      #alert "failed to load translation table"

change_position: (position) =>
  if @experiment
    return if not ((position == 0 and @cur_position == false) or (@cur_position + 1 == position))
    @param_suggestion = @doc.options[position].suggestion
    $("#suggestion-panel-is-on").text(@param_suggestion)
    $("#translated-status").text("translating sentence #{position + 1} out of #{@doc.source.length}")
    $("#send-experiment").text("Finish experiment") if (position + 1) == @doc.source.length
    @log("start")
  @suggestions.clear()
  @save_target() if @cur_position != false
  $("#source-top").children().slice(0,position).show()
  $("#source-top").children().slice(position,@length).hide()
  $("#source-bottom").children().slice(0,position + 1).hide()
  $("#source-bottom").children().slice(position + 1,@length).show()

  $("#target-top").children().slice(0,position).show()
  $("#target-top").children().slice(position,@length).hide()
  $("#target-bottom").children().slice(0,position + 1).hide()
  $("#target-bottom").children().slice(position + 1,@length).show()

  $("#source-sentence").text($("#source-top .ac-source[data-position=#{position}]").text())
  $("#target-sentence").val($("#target-top .ac-target[data-position=#{position}]").text())
  @cur_position = position
  $("#target-sentence").focus()
  @load_translation_table($("#source-top .ac-source[data-position=#{position}]").text())

add_words: (words, change_covered = false) =>
  text = $("#target-sentence").val()
  text = Utils.trim(text)
  words = Utils.trim(words)
  text = Utils.trim(text)
  text += " #{words} "
  $("#target-sentence").val(text)
  $("#target-sentence").click()