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

const PDFDocument = require("pdfkit");
const colors      = ["black", "#080", "#e30313"];

// otvet - это объект ответа (передается скриптом server.js)
// id    - это id статьи (строка)
// user  - это данные клиента [3, "ivanov", "Иванов", "Ян", "Карлович"]
// Отдает pdf-файл сертификата в браузер клиента
module.exports = async (otvet, id, user) => {

   let err = 0,
       MON = [
          '', "января", "февраля", "марта", "апреля", "мая", "июня",
          "июля", "августа", "сентября", "октября", "ноября", "декабря"
       ]
   errLabel: {

   id = id.toLowerCase();

   // Забираем из базы запрашиваемую статью и проверяем, опубликована ли она,
   // а также является ли юзер ее автором или одним из соавторов
   let res = await dbFind("articles", {_id: id});
   if (!res.length) {err = 1; break errLabel;}
   if (res[0].status < 7) {err = 1; break errLabel;}
   let author;
   if      (res[0].us == user[1])   author = res[0].author;
   else if (res[0].coauth[user[1]]) author = res[0].coauth[user[1]][0];
   else                             {err = 1; break errLabel;}
   author = author.replace(/^(\S+) (\S+) (\S+)$/, "$2 $3 $1");
   
   let  dtArr = res[0].dt2.split('.'),
       dtPubl = `${Number(dtArr[0])} ${MON[Number(dtArr[1])]} `
              + `${dtArr[2]} года`,      
       title  = res[0].head.toUpperCase();

   // left, top, font-size, text-align (0=center, 1=left),
   // letter-spacing, color (0=black, 1=green, 2=red), text
   let content = [   
      [  0, 180, 11, 0, 0.7, 1, "АРХИВ ПУБЛИКАЦИЙ ОБУЧАЮЩИХСЯ И СОТРУДНИКОВ"],
      [  0, 198,  9, 0, 0.5, 1, "СПЕЦИАЛИЗИРОВАННОГО УЧЕБНО-НАУЧНОГО ЦЕНТРА"],
      [  0, 210,  9, 0, 0.5, 1, "УРАЛЬСКОГО ФЕДЕРАЛЬНОГО УНИВЕРСИТЕТА"],
      [  0, 225,  8, 0,   0, 0, "Обновляемое электронное издание "
                              + "сетевого распространения"],
      [  0, 235,  8, 0,   0, 0, "Не является средством массовой информации"],
      [  0, 265, 32, 0,   2, 2, "СЕРТИФИКАТ"],
      [  0, 310, 14, 0,   0, 2, "о публикации статьи"],
      [  0, 360, 10, 0, 0.5, 1, "ОБЛАДАТЕЛЬ СЕРТИФИКАТА"],
      [  0, 375, 14, 0,   0, 0, author],  
      [  0, 420, 10, 0, 0.5, 1, "СТАТЬЯ"],
      [  0, 437, 12, 0, 0.5, 0, title],   
      [  0, 533, 10, 0, 0.5, 1, "АДРЕС В АРХИВЕ"],
      [  0, 550, 12, 0,   0, 0, "http://lycarch.urfu.ru/pub/" + id],
      [  0, 610, 11, 1,   0, 0, "Директор СУНЦ УрФУ"],
      [290, 610, 11, 1,   0, 0, global.DIRECTOR],
      [  0, 655, 11, 1,   0, 0, "Главный редактор"],
      [290, 655, 11, 1,   0, 0, global.GLRED],
      [  0, 715,  9, 1,   0, 0, "Екатеринбург"],
      [  0, 728,  9, 1,   0, 0, dtPubl],
      [  0, 740,  9, 1,   0, 0, "ID " + id.toUpperCase()]        
   ];

   const doc = new PDFDocument({
      size: "A4", margin: 24, info: {Title: "Certificate"}
   });
   otvet.writeHead(200, {
      "Content-Type": "application/pdf",
      "Content-Disposition": "inline; filename=certificate.pdf"
   });
   doc.pipe(otvet);
   try {
      doc.font(__dirname + "/../www/fonts/ptsans.otf");
      doc.image(__dirname + "/sert_blank.jpg", 24, 24, {width: 547});

      for (let el of content) {
         let align = el[3] ? "left" : "center";
         let opt = {width: 403, align: align, characterSpacing: el[4]};
         doc.fontSize(el[2]);
         doc.fillColor(colors[el[5]]);
         doc.text(el[6], 96 + el[0], el[1], opt);
      }
   }
   catch(e) {;}
   doc.end();
   } // end of errLabel block
   if (err) {
      otvet.writeHead(423, {"Content-Type": "text/html"});
      otvet.end(
         "<h1>423 Locked</h1><hr><address>Server lycArch.urfu.ru</address>"
      );
   }
};
