const HEADERS = "headers"
const PATH = "path"
const TAGS = "tags"
const TITLE = "title"

const SEARCH_TIMEOUT_MS = 100
var SEARCH_TIMEOUT_ID = -1

const fuse = new Fuse(data, {
  keys: [ 'title' ],
  ignoreLocation: true,
  threshhold: 0.4,
  minMatchCharLength: 0,
})

const RESULTS_MAX = 15

const searchBar = document.getElementById('search')
const resultsDiv = document.getElementById('searchResults')

var results = []

function updateResultsWithTimeout() {
  console.log("clearing timeout")
  if (SEARCH_TIMEOUT_ID) SEARCH_TIMEOUT_ID = clearTimeout(SEARCH_TIMEOUT_ID)
  SEARCH_TIMEOUT_ID = setTimeout(updateResults, SEARCH_TIMEOUT_MS)
}

function updateResults() {
  console.log("updating results")
  resultsDiv.innerHTML = ''
  if (searchBar.value) results = fuse.search(searchBar.value, { limit: RESULTS_MAX }).map(r => r.item)
  else results = data

  results.forEach(r => {
    wrapper = document.createElement('li')
    wrapper.className = "article"

    atag = document.createElement('a')
    atag.href = r.path

    ptag = document.createElement('p')
    ptag.innerHTML = r.title + (r.isdirectory ? '/' : '')

    atag.appendChild(ptag)
    wrapper.appendChild(atag)
    resultsDiv.appendChild(wrapper)
  })
}

searchBar.addEventListener('keyup', e => {
  console.log(e)
  // if user pressed enter
  if (e.keyCode === 13) {
    if (e.shiftKey) {
      window.open(results[0].path, '_blank')
    } else {
    window.location.href = results[0].path
    }
    return
  }
  updateResultsWithTimeout()
})

searchBar.addEventListener('change', updateResultsWithTimeout)

const searchParams = new URL(window.location.href).searchParams;
searchBar.value = searchParams.get('q');
updateResults();

console.log(results)

if (searchParams.has('lucky')) {
  window.location.href = results[0].path;
}