import { useState } from "react";
import dayjs from "dayjs";
import {uint8ToBase64,fillPetition} from "../../../helpers/petitions";
import {getPetitionPdf, getSealedPetitionPdf} from "../../../API/dynamic-forms";
import {PDFDocument, PDFForm} from "pdf-lib";
import fontkit from "@pdf-lib/fontkit";
import {forceUppercaseGreek} from "../../../helpers/functions";
import {toastError} from "../../../services/toaster";



const useDownloadFilledPetition = () => {

    const logFields = (form: PDFForm) => {
        form.getFields().forEach(field => {
            const type = field.constructor.name
            const name = field.getName()
        })
    }

    function downloadFromByteArray(reportName: string, byte: any) {
        var blob = new Blob([byte], {type: "application/pdf"});
        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        var fileName = reportName;
        link.download = fileName;
        link.click();
    };

    const downloadPetition = async (form_id: string, form_data: Record<string, any>, form_slug: string, type?: string) => {


        try {
            const url = 'https://pdf-lib.js.org/assets/ubuntu/Ubuntu-R.ttf';
            const fontBytes = await fetch(url).then(res => res.arrayBuffer());

            const processPdf = async (pdfData: ArrayBuffer) => {
                const pdfDoc = await PDFDocument.load(pdfData);
                pdfDoc.registerFontkit(fontkit);

                const font = await pdfDoc.embedFont(fontBytes);
                const form = pdfDoc.getForm();

                fillPetition(form, form_data, form_slug);
                form.updateFieldAppearances(font);

                const pdfBytes = await pdfDoc.save();
                downloadFromByteArray(`${form_slug}.pdf`, pdfBytes);
            };

            if (type === 'unsealed') {
                const res = await getPetitionPdf(form_id as string);
                await processPdf(res.data);
            }

            if (type === 'sealed') {
                const res = await getSealedPetitionPdf(form_id as string);
                await processPdf(res.data);
            }
        }
        catch (e: any) {

            toastError('Δεν υπάρχει PDF, για αυτήν την αίτηση')
        }

    }


    return [downloadPetition] as const
}
export default useDownloadFilledPetition
