let idxs = new XMLHttpRequest();
idxs.open('GET', '/static/js/search/search-idx-list.json', false);
idxs.send();
let idx_list =JSON.parse(idxs.responseText);

let lnrjs = new XMLHttpRequest();
lnrjs.open('GET', '/static/js/lunr.js', false);
lnrjs.send();
eval(lnrjs.responseText);


let meta = new XMLHttpRequest();
meta.open('GET', '/static/js/search/metadata.json', false);
meta.send();
var metadata = JSON.parse(meta.responseText)


async function getData(element) {
    const url = `/${element}`;
    try {
      const response = await fetch(url);
      if (!response.ok) {
        throw new Error(`Response status: ${response.status}`);
      }
  
      const json = await response.json();
      return json
    } catch (error) {
      console.error(error.message);
    }
  }

onmessage = (e) => {
    let query = e.data
    let results = []
    idx_list.forEach(element => {
        p = getData(element)
        p.then(function (json) {
            let idx = lunr.Index.load(json)
            res = idx.search(query).slice(0,100)
            res.forEach(r => {
              r.meta = metadata[r.ref]
            })
            results = results.concat(res)
            results = results.sort(({score:a}, {score:b}) => b-a);
            results = results.slice(0,100)
            postMessage(results)
        })
        // let request = new XMLHttpRequest();
        // request.open('GET', `/${element}`, false);
        // request.send();
        // console.log(JSON.parse(request.responseText))
        // let idx = lunr.Index.load(JSON.parse(request.responseText))
        // res = idx.search(query).slice(0,100)
        // results = results.concat(res)
        // results = results.sort(({score:a}, {score:b}) => b-a);
        // results = results.slice(0,100)
        // postMessage(results)
        
    })
}