/**
 *   АРХИВ ПУБЛИКАЦИЙ ОБУЧАЮЩИХСЯ И СОТРУДНИКОВ СУНЦ УрФУ
 *   Copyright © 2021, А.М.Гольдин. ISC license
 */
"use strict";

const dqs = elem => document.querySelector(elem);
const logout = () => document.cookie = "u=; max-age=0";

// Смотрим, авторизован ли юзер
if (!document.cookie.includes("u=")) location.assign('/');

// Отправка запроса api (аргумент dt с данными запроса не обязателен)
const api = async (func, dt) => {
   let body = {f:func};
   if (dt) body.dt = dt;
   let opt = {method:"POST", cache:"no-cache", body:JSON.stringify(body)};
   return await (await fetch("/api/", opt)).text();
}

// Получение списка редакции сайта для сервиса root.html
let zagol = dqs("article").innerHTML;
const officeGet = async () => {   
   let apiResp = await api("officeEdit");
   if (apiResp == "none") {alert("Запрос отклонен"); return;}
   let officeArr = JSON.parse(apiResp);
   if (!officeArr.length) {
      dqs("article").innerHTML = zagol;
      dqs("article").innerHTML += "<section>Пока никого нет</section>";
   }
   else {
      dqs("article").innerHTML = zagol;
      for (let p of officeArr.sort((a,b) => a[1].localeCompare(b[1], "ru"))) {
         let danet = p[3].toString(2).padStart(3, '0').split('')
                   . map(x => x=='1' ? '■' : "&nbsp;");
         dqs("article").innerHTML += `<section> `
            + `<div onclick="staffDel('${p[0]}')">&#10060;</div> `
            + `<div>${p[0]}</div> <div>${p[1]}</div> <div>${p[2]}</div> `
            + `<div>${danet[0]}</div> <div>${danet[1]}</div> `
            + `<div>${danet[2]}</div> </section>`;
      }      
   }
}

// Удаление сотрудника сервисом root.html
const staffDel = async (login) => {
   let apiResp = await api("officeEdit", {oper: "del", login: login});
   if (apiResp == "none") {alert("Запрос отклонен"); return;}
   officeGet();
}

// Добавление сотрудника сервисом root.html
const staffAdd = async () => {
   let rolesArr = ['0', '0', '0'];
   for (let i=0; i<3; i++) if (dqs(`#ch${i}`).checked) rolesArr[i] = '1';
   let roles = parseInt(rolesArr.join(''), 2);

   let apiResp = await api("officeEdit", {
      oper: "add", login: dqs("#l").value,
      fio: dqs("#f").value, eml: dqs("#m").value, roles: roles}
   );
   if (apiResp == "none") {alert("Запрос отклонен"); return;}
   officeGet();
}

// Полное удаление опубликованной статьи
const fullDel = async () => {
   if(!confirm('Вы уверены?')) return false;
   let id = dqs('#fullDel').value.trim().toLowerCase();
   if(!id) return false;
   let resp = await api('fullDel', id);
   if (resp == 'success') alert('Статья успешно удалена');
   else                   alert('Ошибка, статья не удалена');
   dqs('#fullDel').value = '';
}
