<script setup>
  import {reactive, ref } from 'vue'
  import {getSelf,alterSelf,disconnect,deleteUser} from '../rest/Users.js'
  import {getSelfCurriculum, getAllCurriculums} from '../rest/curriculum.js'
  import {getCourses} from "../rest/courses.js"
  import i18n from "@/i18n.js"
  import { uploadProfilePicture } from '@/rest/uploads.js'

  const user = ref(await getSelf());
  const UserCurriculum = ref(""); 
  const curricula = ref (await getAllCurriculums());
  if(user.value.role === "Student"){
    UserCurriculum.value = await getSelfCurriculum();
  }

  if(user.role === "Teacher"){
    UserCurriculum.value = await getCourses("Teacher");
  }
  const modif = ref(false);
  const curric = ref(false);
  const reg = ref(false);

  const pattern = {
    profilPictureUrl:null,
    email:null,
    address:null,
    password:null,
  };
  
  const patternInfos ={
    email: null,
    password: null,
    passwordConfirm:null,
    id:null,
  }

  
  let toModify= Object.assign({}, pattern);
  let personnalInfos =  Object.assign({}, patternInfos);
  
  function resetInputs(inputs,list){
    inputs=Object.assign({},list); 
  }
  
  async function ChangeInfos(){
    for (let element in toModify){
         if (element =="email" && (toModify[element] !== null)){
          await  alterSelf(user.value.regNo,{email : toModify[element]});
        }      

        if (element =="profilPictureUrl" && (toModify[element] !== null)){
          await  alterSelf(user.value.regNo,{ profilPictureUrl : toModify[element]});
        }
        else if(element == "address" && (toModify[element] !== null)){
          await  alterSelf(user.value.regNo,{address : toModify[element]});
        }
        else if(element == "password" && (toModify[element] !== null)){
          await  alterSelf(user.value.regNo,{password : toModify[element]});
        }
    }
      toModify= Object.assign({},pattern);
        user.value = await getSelf()

   } 
  
  function setModify(item){
     toModify.address = item.address;
     toModify.profilPictureUrl = item.profilPictureUrl;
     toModify.email= item.email;
     toModify.password= item.password;
  }

  
  async function unRegister(){
   deleteUser(user.value.regNo);
   disconnect()
   setTimeout(() => {
      window.location.href="#/home";
      }, "500");
    
  }

  function getPP(){
    if(user.value.profilePictureUrl === null){
      return "/Clyde.png"
    }
    return user.profilePictureUrl
  }
</script>

<template>
  <div class="body">
  <div class="container">
    <div class="profilPic">
      <img class="subContainter" :src=getPP()>

    </div>
      <div class="globalInfos">
        <div v-if="modif==false && curric==false && reg==false " class="infosContainer" >
          <div>
            {{user.firstName}} {{user.lastName}}   
          </div>
          <div>
            E-mail: {{user.email}}      
          </div>
          <div v-if="user.role==='Student'">
            {{user.option}} {{i18n(user.role)}} 
          </div>
          <div v-else>
            Role:  {{i18n((user.role))}} 
          </div>
          <div>
            <button @click="modif=!modif; setModify(user)"> {{i18n("profile.modify.data")}} </button>
          </div>
          <div v-if="(user.role==='Student')">
            <button @click="reg=!reg">{{i18n("profile.reRegister")}}</button>
            <button @click="unRegister()" style="float:right;background-color:rgb(150,0,0);">{{i18n("profile.unRegister")}}</button>
          </div>
          <div v-if="(user.role==='Student')">
            <button @click="curric=!curric">{{i18n("profile.change.curriculum")}}</button>
          </div>
        </div>
        <div v-else-if="modif" class="infosContainer">
          <div>
            {{i18n("profile.picture")}}:
            <input type="file" @change="user.profilPicture = uploadProfilePicture($event.target.files);" accept="image/*">
          </div>
          <div>
            E-mail:  
            <input type="mail" v-model="toModify.email" />
          </div>
          <div>
            {{i18n("profile.address")}}:
            <input type="text" v-model="toModify.id">
          </div>
          <div>
            {{i18n("login.password")}}:
            <input type="password" v-model="toModify.password">
          </div>
          <div>
            {{i18n("login.cPassword")}}:
            <input type="password" v-model="toModify.passwordConfirm">
          </div>
          <div>
            <button @click=" modif=!modif; ChangeInfos();">{{i18n("courses.confirm")}}</button>
            <button @click="modif=!modif; resetInputs(toModify,pattern);" style="float:right;">{{i18n("courses.back")}}</button>
          </div>
        </div>
        <div v-else-if="curric" class="infosContainer">
          <div style="height:40px;">
            {{i18n("Curriculum")}}:  
            <select v-model="curriculum" >
              <option v-for="item in curricula" style="font-size:20px;" :value="item">{{item.option}}</option>        
            </select>
          </div>

          <div>
            <button @click=" curric=!curric;">{{i18n("courses.confirm")}}</button>
            <button @click="curric=!curric; resetInputs(personnalInfos,patternInfos);" style="float:right;">{{i18n("courses.back")}}</button>
          </div>
        </div>
        <div v-else-if="reg" class="infosContainer">
          <div>
            E-mail:  
            <input type="mail" v-model="toModify.email" />
          </div>
          <div>
            ID :
            <input type="text" v-model="toModify.id">
          </div>
          <div>
            {{i18n("login.password")}}:
            <input type="password" v-model="toModify.password">
          </div>
          <div>
            {{i18n("login.cPassword")}}:
            <input type="password" id="confirm">
          </div>

          <div>
            <button @click=" reg=!reg;">{{i18n("courses.confirm")}}</button>
            <button @click=" reg=!reg; resetInputs(personnalInfos,patternInfos);" style="float:right;">{{i18n("courses.back")}}</button>
          </div>
        </div>

      </div>
      
      <div v-if="modif==false && curric==false && reg==false "class="moreInfos">

        <div v-if="(user.role ==='Student')">
          <div class="listTitle">
            {{i18n("profile.course.list")}}
          </div>
          <div  class="listElement" v-for="item in UserCurriculum.courses">
          <div class=" containerElement">
            <div class="name"> {{item.title}} </div>
            <div class="teacher">{{item.owner.lastName}}</div> 
            <div class="credits">Credits:{{item.credits}}</div>  
          </div>
          </div>
        </div>
        
        <div>
        </div>
    
      </div>
  </div>
</div>
</template>
<style scoped>

.container{
  min-width:675px;
  display:grid;
  grid-template-columns:10vw 50vw;
  grid-template-rows:200px auto;
  column-gap:2.7%;
  row-gap:45px;
  grid-template-areas:
  "profilPic globalInfos"
  "minfos minfos";
}

.profilPic{
  width:100%;
  grid-area:profilPic;
}

.globalInfos {
  grid-area:globalInfos;
  align-self :center;

}

.subContainter{
  width:100%;
  background-color:rgb(50,50,50);
  border-radius:20px;
  border:4px solid black;
}

.moreInfos {
  grid-area:minfos;
}
.body {
    min-width:960px;
    width:100%;
    display:flex;
    align-items:center;
    justify-content:center;
    margin-top:5%;
  }
 .containerElement{ 
   justify-content:center;
    display:grid;
    grid-template-columns:38.8% 38.8% 22.4%;
    grid-template-areas:
    "name teacher credits"; 
    column-gap:10px;
    
  }
  
  .name {
    grid-area:name;
    align-self:center;
  }

  .teacher{
    grid-area:teacher;
    align-self:center;
  }

  .credits{
    grid-area:credits;
    align-self:center;
  }

.listTitle{
    min-width:197px;
    display: flex;
    justify-content: center;
    align-items: center;
    width:8vw;
    margin-left:auto;
    margin-right:auto;
    border:2px solid black;
    font-size:25px;
    color:white;
    padding:20px;
    background-color:rgb(50,50,50);
    border-radius:20px;margin-bottom:10px;
}

.listElement{
  min-width:625px;
  border:2px solid black;
  font-size:25px;
  color:white;
  padding:20px;
  background-color:rgb(50,50,50);
  border-radius:20px;
  margin-bottom:10px;
}

.infosContainer {
min-width:350px;
padding-bottom:50px;
border:2px solid black;
font-size:25px;
color:white;
padding:20px;
background-color:rgb(50,50,50);
border-radius:20px;
}


button{
  border:none;
  background-color:rgb(239, 60, 168);
  border-radius:10px;
  height:35px;
  margin-top:10px;

}

button:hover{
  opacity:0.8;
}
</style>