'use strict'

/* global $, Vue, _, socket */

if ($('#search-input').length) {
  $('#search-input').focus()

  $('.searchresults').css('display', 'block')

  var vueHeader = new Vue({
    el: '#header-container',
    data: {
      searchq: '',
      searchres: [],
      searchsuggest: [],
      searchload: 0,
      searchactive: false,
      searchmoveidx: 0,
      searchmovekey: '',
      searchmovearr: []
    },
    watch: {
      searchq: (val, oldVal) => {
        vueHeader.searchmoveidx = 0
        if (val.length >= 3) {
          vueHeader.searchactive = true
          vueHeader.searchload++
          socket.emit('search', { terms: val }, (data) => {
            vueHeader.searchres = data.match
            vueHeader.searchsuggest = data.suggest
            vueHeader.searchmovearr = _.concat([], vueHeader.searchres, vueHeader.searchsuggest)
            if (vueHeader.searchload > 0) { vueHeader.searchload-- }
          })
        } else {
          vueHeader.searchactive = false
          vueHeader.searchres = []
          vueHeader.searchsuggest = []
          vueHeader.searchmovearr = []
          vueHeader.searchload = 0
        }
      },
      searchmoveidx: (val, oldVal) => {
        if (val > 0) {
          vueHeader.searchmovekey = (vueHeader.searchmovearr[val - 1])
            ? 'res.' + vueHeader.searchmovearr[val - 1].entryPath
            : 'sug.' + vueHeader.searchmovearr[val - 1]
        } else {
          vueHeader.searchmovekey = ''
        }
      }
    },
    methods: {
      useSuggestion: (sug) => {
        vueHeader.searchq = sug
      },
      closeSearch: () => {
        vueHeader.searchq = ''
      },
      moveSelectSearch: () => {
        if (vueHeader.searchmoveidx < 1) { return }
        let i = vueHeader.searchmoveidx - 1

        if (vueHeader.searchmovearr[i]) {
          window.location.assign('/' + vueHeader.searchmovearr[i].entryPath)
        } else {
          vueHeader.searchq = vueHeader.searchmovearr[i]
        }
      },
      moveDownSearch: () => {
        if (vueHeader.searchmoveidx < vueHeader.searchmovearr.length) {
          vueHeader.searchmoveidx++
        }
      },
      moveUpSearch: () => {
        if (vueHeader.searchmoveidx > 0) {
          vueHeader.searchmoveidx--
        }
      }
    }
  })

  $('main').on('click', vueHeader.closeSearch)
}