text: import { generateQR } from "./util";
  import { PDFDocument, StandardFonts } from "pdf-lib";
  
  const ys = {
    travail: 578,
    achats: 533,
    sante: 477,
    famille: 435,
    handicap: 396,
    sport_animaux: 358,
    convocation: 295,
    missions: 255,
    enfants: 211,
  };
  
  export async function generatePdf(profile, reasons, pdfBase) {
    const creationInstant = profile.objetDate; // modifié pour être que la date de création du QR soit cohérente avec celle de la sortie
    const creationDate = creationInstant.toLocaleDateString("fr-FR");
    const creationHour = creationInstant
      .toLocaleTimeString("fr-FR", { hour: "2-digit", minute: "2-digit" })
      .replace(":", "h");
  
    const {
      lastname,
      firstname,
      birthday,
      placeofbirth,
      address,
      zipcode,
      city,
      datesortie,
      heuresortie,
    } = profile;
  
    const data = [
      `Cree le: ${creationDate} a ${creationHour}`,
      `Nom: ${lastname}`,
      `Prenom: ${firstname}`,
      `Naissance: ${birthday} a ${placeofbirth}`,
      `Adresse: ${address} ${zipcode} ${city}`,
      `Sortie: ${datesortie} a ${heuresortie}`,
      `Motifs: ${reasons}`,
    ].join(";\n ");
  
    const existingPdfBytes = await fetch(pdfBase).then((res) =>
      res.arrayBuffer()
    );
  
    const pdfDoc = await PDFDocument.load(existingPdfBytes);
  
    // set pdf metadata
    pdfDoc.setTitle("COVID-19 - Déclaration de déplacement");
    pdfDoc.setSubject("Attestation de déplacement dérogatoire");
    pdfDoc.setKeywords([
      "covid19",
      "covid-19",
      "attestation",
      "déclaration",
      "déplacement",
      "officielle",
      "gouvernement",
    ]);
    pdfDoc.setProducer("DNUM/SDIT");
    pdfDoc.setCreator("");
    pdfDoc.setAuthor("Ministère de l'intérieur");
  
    const page1 = pdfDoc.getPages()[0];
  
    const font = await pdfDoc.embedFont(StandardFonts.Helvetica);
    const drawText = (text, x, y, size = 11) => {
      page1.drawText(text, { x, y, size, font });
    };
  
    drawText(`${firstname} ${lastname}`, 119, 696);
    drawText(birthday, 119, 674);
    drawText(placeofbirth, 297, 674);
    drawText(`${address} ${zipcode} ${city}`, 133, 652);
  
    reasons.split(", ").forEach((reason) => {
      drawText("x", 78, ys[reason], 18);
    });
  
    let locationSize = getIdealFontSize(font, profile.city, 83, 7, 11);
  
    if (!locationSize) {
      // modifié
      /*alert(
        'Le nom de la ville risque de ne pas être affiché correctement en raison de sa longueur. ' +
          'Essayez d\'utiliser des abréviations ("Saint" en "St." par exemple) quand cela est possible.',
      )*/
      locationSize = 7;
    }
  
    drawText(profile.city, 105, 177, locationSize);
    drawText(`${profile.datesortie}`, 91, 153, 11);
    drawText(`${profile.heuresortie}`, 264, 153, 11);
  
    // const shortCreationDate = `${creationDate.split('/')[0]}/${
    //   creationDate.split('/')[1]
    // }`
    // drawText(shortCreationDate, 314, 189, locationSize)
  
    // // Date création
    // drawText('Date de création:', 479, 130, 6)
    // drawText(`${creationDate} à ${creationHour}`, 470, 124, 6)
  
    const generatedQR = await generateQR(data);
  
    const qrImage = await pdfDoc.embedPng(generatedQR);
  
    page1.drawImage(qrImage, {
      x: page1.getWidth() - 156,
      y: 100,
      width: 92,
      height: 92,
    });
  
    pdfDoc.addPage();
    const page2 = pdfDoc.getPages()[1];
    page2.drawImage(qrImage, {
      x: 50,
      y: page2.getHeight() - 350,
      width: 300,
      height: 300,
    });
  
    const pdfBytes = await pdfDoc.save();
  
    return new Blob([pdfBytes], { type: "application/pdf" });
  }
  
  function getIdealFontSize(font, text, maxWidth, minSize, defaultSize) {
    let currentSize = defaultSize;
    let textWidth = font.widthOfTextAtSize(text, defaultSize);
  
    while (textWidth > maxWidth && currentSize > minSize) {
      textWidth = font.widthOfTextAtSize(text, --currentSize);
    }
  
    return textWidth > maxWidth ? null : currentSize;
  }
  