/**
 *   ПУБЛИКАЦИЯ СТАТЬИ
 *   Copyright © 2021, А.М.Гольдин. ISC license
 */
"use strict";

// Возвращает success или none
//   id - id статьи
// user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
const pubApi = require("./loadArticle");
module.exports = async (id, user) => {  

   try {
      // Запрос действительно от редактора?
      let roles = "000";
      let staff = await dbFind("staff", {login: user[1]});
      if (staff[0]) roles = staff[0].roles.toString(2).padStart(3, '0');
      if (user[1] == ADMIN) roles = "111";
      if (!roles[0]) return "none";
      
      // Есть ли такая статья и не опубликована ли она уже?
      let res = await dbFind("articles", {_id: id});
      if (!res.length)        return "none";
      if (res[0].status == 7) return "none";
      let title = res[0].head,
          fio   = res[0].author,
          eml   = res[0].eml;
      
      // Генерируем html
      let html = await pubApi(id, user);
      if (html == "none") return "none";
      const reg = new RegExp(`\\?draft_${id}\\/`, "g");
      html = html.replace(reg, '');

      // Перемещаем статью из черновиков в pub
      await fs.promises.rename(
         __dirname + "/../draft/"   + id,
         __dirname + "/../www/pub/" + id
      );
      await fs.promises.writeFile(
         __dirname + "/../www/pub/" + id + "/index.html", html
      );         

      // Удаляем лишние файлы      
      await fs.promises.rm(__dirname + "/../www/pub/" + id + "/article.txt");
      try {
         await fs.promises.rm(
            __dirname + "/../www/pub/" + id + "/editor.txt");
      } catch(e) {;}
      try {
         await fs.promises.rm(
            __dirname + "/../www/pub/" + id + "/reviewer.txt",
            {recursive: true}
         );
      } catch(e) {;}

      // Вносим изменения в базу
      let now = (new Date()).toISOString().split('T')[0]
              . replace(/(\d+)-(\d+)-(\d+)/, "$3.$2.$1");
      await db.articles.update(
         {_id: id}, {$set: {status: 7, dt2: now}}, {},
      );

      // Посылаем письмо автору
      await sendEml(eml, "Ваша статья опубликована",
           `Уважаемый(ая) ${fio}!\n\nВаша статья «${title}» опубликована. `
         + `Статья доступна по ссылке http://lycarch.urfu.ru/pub/${id} `
         + `Если вы (или ваши соавторы) хотите получить сертификат о `
         + `публикации, воспользуйтесь инструкцией `
         + `http://lycarch.urfu.ru/?m#cert`
      );

      return "success";      
   }
   catch(e) {return "none";}
};
