/**
 *   НАЗНАЧЕНИЕ СТАТЬЕ РЕЦЕНЗЕНТА ИЛИ КОРРЕКТОРА
 *   Copyright © 2021, А.М.Гольдин. ISC license
 */
"use strict";

// Возвращает success или none
// data - это массив вида ["rev", id, login], где
//        "rev" - рецензент, "corr" - корректор
//           id - id статьи
//        login - логин назначаемого рецензента или корректора (или ADMIN)
// user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
module.exports = async (data, user) => {  

   const id = data[1] ? data[1] : '',
      login = data[2] ? data[2] : '';
   if (!id || !login) return "none";

   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,
         author = res[0].author,
        authEml = res[0].eml;

      // Определяем фио и почту рецензента или корректора
      let fio = '', eml = '';
      if (login != "ADMIN") {
         let staff = await dbFind("staff", {login: login});
         if (!staff.length) return "none";
         fio = staff[0].fio.split(' ').slice(1).join(' ');
         eml = staff[0].eml;
      }      

      // Пишем рецензента или корректора, новые статус и время в базу статей
      let who = "корректор", whoBrief = "КОРР";
      let now = (new Date()).toISOString().split('T')[0]
              . replace(/(\d+)-(\d+)-(\d+)/, "$3.$2.$1");
      if (data[0] == "rev") {
         who      = "рецензент";
         whoBrief = "РЕЦ";
         await db.articles.update(
            {_id: id}, {$set: {rev: login, status: 3, dt2: now}}, {}
         );
      }
      else {
         await db.articles.update(
            {_id: id}, {$set: {corr: login, status: 5, dt2: now}}, {}
         );
      }

      // Посылаем письмо автору
      await sendEml(authEml, `Статья направлена ${who}у`,
           `Уважаемый(ая) ${author}!\n\n`
         + `Ваша статья «${title}» направлена ${who}у. О результатах его `
         + `работы со статьей вы будете проинформированы по электронной почте.`
      );

      // Посылаем письмо рецензенту или корректору
      if (!eml) return "success";
      await sendEml(eml, "Новая статья",
           `Уважаемый(ая) ${fio}!\n\nВам (как ${who}у) направлена статья `
         + `${id.toUpperCase()} «${title}». Для работы со статьей `
         + `авторизуйтесь на сайте и зайдите в раздел «${whoBrief}».`
      );      

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