<script setup>
import { ref} from "vue";
import FilterComponent from "@/Apps/ScientificPublications/FilterComponent.vue";
import ArticleComponent from "@/Apps/ScientificPublications/ResearchComponent.vue";
import {getFile, fetchAllResearches, addView} from "@/rest/ScientificPublications/ManageResearch.js";
import {fetchResearch} from "@/rest/ScientificPublications/ResearcherProfile.js";
const input = ref("")
const isFilterOpened = ref(false);
const isResearchOpened = ref(false);
const articleToDisplay = ref(Object)

const researchList = ref(await fetchAllResearches());
const isResearcher = ref(false)

const props = defineProps({
  filters: ref([""]),
});

const openFilter = () => {
  isFilterOpened.value = true;
};
const closeFilter = () => {
  isFilterOpened.value = false;
};
const submitFilters = ()=>{
}
const openResearch = (article) => {
  isResearchOpened.value = true;
  articleToDisplay.value = article;
}

const closeResearch = () => {
  isResearchOpened.value =false;
  articleToDisplay.value = null;
}

const downloadBibTex = (research) => {
  getFile(research.bibTexLocation)
}

async function downloadArticle (research){
  await addView(research.pdfLocation)
  await getFile(research.pdfLocation)
  articleToDisplay.value = await fetchResearch(articleToDisplay.value.id)
}

function downloadCoAuthors(){
  //todo
  const data = JSON.stringify(researcher.value);
  const blob = new Blob([data], {type:"application/json"});
  return URL.createObjectURL(blob);
}


function searchInList(list, searchInput) {
  let retList = []
  for (let i = 0; i < list.length; i++) {
    let researcher = list[i].researcher.user.firstName + " " +list[i].researcher.user.lastName
    if (isResearcher.value && (lDistance(researcher, searchInput) < 5 || researcher.toUpperCase().indexOf(searchInput.toUpperCase()) > -1)){
      retList.push(list[i])
    }
    if (!isResearcher.value && (lDistance(list[i].title, searchInput) < 10 || list[i].title.toUpperCase().indexOf(searchInput.toUpperCase()) > -1)){
      retList.push(list[i])
    }
  }
  return retList
}

function lDistance(s,t){
  if (!s.length) return t.length;
  if (!t.length) return s.length;
  const arr = [];
  for (let i = 0; i <= t.length; i++) {
    arr[i] = [i];
    for (let j = 1; j <= s.length; j++) {
      arr[i][j] =
          i === 0
              ? j
              : Math.min(
                  arr[i - 1][j] + 1,
                  arr[i][j - 1] + 1,
                  arr[i - 1][j - 1] + (s[j - 1] === t[i - 1] ? 0 : 1)
              );
    }
  }
  return arr[t.length][s.length];
}

</script>

<template>
<div id="main">
  <FilterComponent :isOpen="isFilterOpened" :allArticles="researchList" @modal-close="closeFilter" @submit="submitFilters()"></FilterComponent>
  <ArticleComponent :article="articleToDisplay" :isOpen="isResearchOpened" :manage="false" @modal-close="closeResearch" @downloadPdf="downloadArticle(articleToDisplay)" @downloadBibTex="downloadBibTex(articleToDisplay)"></ArticleComponent>
  <div id="researches">
    <div id="search">
      <input v-if="!isResearcher" type="text" id="search-input" placeholder="search for researches" v-model="input"/>
      <input v-else type="text" id="search-input" placeholder="search for researcher" v-model="input"/>
      <button id="filterButton" @click="openFilter">  Filters </button>
      <button v-if="!isResearcher" id="unToggledResearchButton" @click="isResearcher = !isResearcher">  Toggle Researcher Search</button>
      <button v-if="isResearcher" id="toggledResearchButton" @click="isResearcher = !isResearcher">  UnToggle Researcher Search</button>
    </div>
    <ul id="researchUL">
      <li id="researchLi" v-for="n in searchInList(researchList,input)">
        <div class="vl"> {{n.title}}</div>
        <div class="vl"> <a :href="'#/researcher-profile?id=' + n.researcher.id"> {{ n.researcher.user.firstName +" "+ n.researcher.user.lastName }}</a>
        </div>
        <a @click="openResearch(n)"> MoreInfo  </a></li>
    </ul>
  </div>
</div>
</template>

<style scoped>

#main {
  height: 100%;
  width: 100%;
}

#search{
  width: 100%;
  height: 10%;
  display: inline-flex;
}
#search-input {
  margin-left: 25px;
  width: 75%;
  font-size: 16px;
  padding: 12px 20px 12px 40px;
  border: 1px solid #ddd;
  height: 20px;
  align-self: center;
}

#filterButton {
  align-self: center;
  margin-left: 2px;
  font-size: xx-large;
  color: white;
  background: rgba(191, 64, 191,0.5);
  border:2px solid black;
}
#filterButton:hover{
  background: rgba(191, 64, 191);
}


#researchUL {
  list-style-type: none;
  color: white;
  padding: 12px;
  margin: 5px;
  height: 100%;
  overflow: scroll;
}
#researchLi{
  display: grid;
  grid-template-columns: auto auto auto;
  border: 2px solid black;
  color: white;
  font-size: x-large;
  text-align: center;
  text-indent: 7px;
  background-color: rgba(255, 255, 255, 0.09);
  border-radius: 18px;
  margin-bottom: 15px;
}
a{
  color:#007aff;
  text-decoration: underline;
  cursor: pointer;
}

.vl {
  border-right: 2px solid black;
}

#unToggledResearchButton{
  align-self: center;
  margin-left: 2px;
  font-size: large;
  color: white;
  background: #2a1981;
  border:2px solid black;
}

#unToggledResearchButton:hover{
  background: #5ac8fa;

}

#toggledResearchButton {
  align-self: center;
  margin-left: 2px;
  font-size: large;
  color: white;
  background: crimson;
  border:2px solid black;
}
#toggledResearchButton:hover{
  background: #ff2d55;
}



</style>