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

// Возвращает объект со статьей, либо "new", если статья создана,
// но еще не загружена, либо "none" в случае ошибки
//  id  - это id запрашиваемой статьи :)
// user - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
module.exports = async (id, user) => {
   try {
      if (!/^\w{3,20}$/.test(id)) return "none";   

      // Промисификатор чтения файла
      const rFile = fl => {
         return new Promise((resolve, reject) => {
            fs.readFile(fl, (e, cnt) => {
               if (e) reject("none"); else resolve(cnt.toString());
            })
         })
      };

      // Проверяем его роль
      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";                  

      // Загружаем данные статьи из базы
      let arts = await dbFind("articles", {_id: id});
      if (!arts[0]) return "none";
      let artObj = arts[0];
      if (artObj.status == 7) return "none";      
      if (!artObj.status) return "new";
      artObj.coauth = Object.keys(artObj.coauth).join(' ');

      // Данные отдаем только редактору, корректору и автору
      if (!roles[0] && !roles[1] && artObj.us != user[1]) return "none";

      // Загружаем текстовый файл со статьей      
      let art;
      try {art  = await rFile( __dirname + `/../draft/${id}/article.txt`);}
      catch(e) {art = "¤¤";}
      

      // Формируем объект статьи
      let fileObj = {};
      [fileObj.annot, fileObj.text, fileObj.bibl] = art.split('¤');
      let res = {...artObj, ...fileObj};

      // Удаляем поле "рецензент"
      delete res.rev;
      
      return JSON.stringify(res);      
   }
   catch(e) {return "none";}
};
