<script setup>
import { ref, reactive } from "vue";
import FilterComponent from "@/Apps/ScientificPublications/FilterComponent.vue";
import ArticleComponent from "@/Apps/ScientificPublications/ResearchComponent.vue";
import {fetchResearches, } from "@/rest/ScientificPublications/ResearcherProfile.js";
import {getSelf, patchProfile} from "@/rest/ScientificPublications/ManageResearcherProfile.js";
import {c, f} from "../../../dist/assets/_plugin-vue_export-helper-Bvj9NrzX.js";
import ResearchPostComponent from "@/Apps/ScientificPublications/ResearchPostComponent.vue";
const input = ref("");
const isFilterOpened = ref(false);
const isResearchOpened = ref(false);
const isPostResearchOpened = ref(false);
const articleToDisplay = ref()
const filters = ref([]);
const changing = ref(false);

let toModify= Object.assign({}, {});

const researcher = ref(await getSelf());
const researchList = ref(await fetchResearches(researcher.value.id));

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;
}

function openPostResearch(){
  isPostResearchOpened.value = true

}


function searchInList(list, searchInput) {
  let retList = []
  for (let i = 0; i < list.length; i++) {
    if (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];
}

function cancelChanges(){
  changing.value = false
  toModify= Object.assign({}, {});
}
function confirmChanges(){
  patchProfile(researcher.value.id, toModify)
  changing.value = false
  toModify= Object.assign({}, {});
}




</script>

<template> <div class="body"><div id="main">
    <FilterComponent :isOpen="isFilterOpened" :allArticles="researchList" @modal-close="closeFilter" @submit="submitFilters()"></FilterComponent>
    <ArticleComponent :article="articleToDisplay" :isOpen="isResearchOpened" :manage=true @modal-close="closeResearch"></ArticleComponent>
    <ResearchPostComponent :researcher="researcher" :isOpen="isPostResearchOpened"></ResearchPostComponent>
    <div id="profilePicture">
      <img src="/Clyde.png" />
    </div>
    <div id="researcherInfos">
      <div class="surrounded" v-if="!changing">{{researcher.user.lastName}} {{researcher.user.firstName}}</div>
      <div class="surrounded" v-else> To Be changed in manage (simple) Profile</div>

      <div class="surrounded" v-if="!changing">Orcid : {{researcher.orcidId}}</div>
      <div class="surrounded" v-else>Orcid : <input v-model="toModify.orcidId"> </input></div>

      <div class="surrounded" v-if="!changing">Email : {{researcher.user.email}}</div>
      <div class="surrounded" v-else> To Be changed in manage (simple) Profile</div>

      <div class="surrounded" v-if="!changing">
        site : <a :href=researcher.site style="color: #007aff"> {{researcher.site}}</a>
      </div>
      <div class="surrounded" v-else>Site : <input v-model="toModify.site"></input></div>

      <div class="surrounded" v-if="!changing">Domain : {{researcher.domain}}</div>
      <div class="surrounded" v-else>Domain : <input v-model="toModify.domain"> </input></div>

      <div style="text-align: center; align-self: center" v-if="!changing"> <button class="modifyButton" @click="changing = !changing">Modify Data</button></div>
      <div v-else style="text-align: center; align-self: center">
        <button id="confirmButton" @click="confirmChanges">Confirm Changes</button>
         <button id="cancelButton" @click="cancelChanges">Cancel Changes</button>
      </div>
    </div>
    <div class="postArticle" style="text-align: center">
     <button class="modifyButton" @click="post">Post a Research</button>


    </div>
    <div id="researches">
      <div id="search">
        <input type="text" id="search-input" placeholder="search for researches" v-model="input"/>
        <button id="filterButton" @click="openFilter">  Filters </button>
      </div>
      <ul id="researchUL">
        <li id="researchLi" v-for="n in searchInList(researchList,input)">
          <div class="vl"> {{n.title}}</div>
          <div class="vl"> {{ n.researcher.user.firstName +" "+ n.researcher.user.lastName }}</div>
         <a @click="openResearch(n)"> Modify Research</a></li>
      </ul>
    </div>
  </div>
</div>
</template>

<style scoped>

#main {
  display: grid;
  grid-template-columns: 22% auto;
  grid-template-rows: 26% auto;
  height: 100%;
  width: 100%;
}

#profilePicture {
  display: flex;
  justify-content: center;
}

#profilePicture img {
  align-self: center;
  justify-self: center;
  width: 60%;
}

#researcherInfos {
  display: grid;
  grid-template-columns: auto auto auto;
  column-gap: 5px;
  grid-template-rows: auto auto;
}

.surrounded {
  border: 2px solid black;
  color: white;
  font-size: x-large;
  align-self: center;
  text-align: center;
  background-color: rgba(255, 255, 255, 0.09);
  border-radius: 20px;
  margin-bottom: 10px;
}

.surrounded select {
  margin-top: 2px;
  margin-bottom: 2px;
  border: 1px solid black;
  color: white;
  background-color: rgb(255, 255, 255, 0.1);
  font-size: large;
}

.modifyButton{
  align-self: center;
  text-align: center;
  border: 2px solid black;
  color: white;
  font-size: xx-large;
  background-color:rgba(191, 64, 191,0.5);
  border-radius: 20px;
}

.modifyButton:hover{
  background:rgba(191,64,191)
}

#cancelButton{
  align-self: center;
  text-align: center;
  border: 2px solid black;
  color: white;
  font-size: x-large;
  background-color: red;
  border-radius: 20px;
}
#cancelButton:hover{
  background: #ff2d55;
}

#confirmButton{
  align-self: center;
  text-align: center;
  border: 2px solid black;
  color: white;
  font-size: x-large;
  background-color: #07bc0c;
  border-radius: 20px;
}
#confirmButton:hover{
  background: #4cd964;
}

#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: 400px;
  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;
}
</style>