import {KarakterPdfView} from "./karakter_pdf_view";
import {PDFDocument} from "pdf-lib";
import fontkit from "@pdf-lib/fontkit";
import download from "downloadjs";
import {SignedNumberToText} from "../../shared/components/Helpers";

export async function CreatePDF(karakter: KarakterPdfView) {
    const existingPdfBytes = await fetch('/pdfs/kem2karakterlap_form.pdf').then(res => res.arrayBuffer())
    const pdfDoc = await PDFDocument.load(existingPdfBytes)
    pdfDoc.registerFontkit(fontkit)

    const fontBytes = await fetch('/fonts/Milonga-Regular.ttf').then(res => res.arrayBuffer())
    const pdfFont = await pdfDoc.embedFont(fontBytes)
    
    const form = pdfDoc.getForm()
    
    const osztalyok = karakter.Osztaly.length > 1 ? karakter.Osztaly.map(x => `${x.osztaly} (${x.szint})`).join(", ") : karakter.Osztaly[0].osztaly
    form.getTextField("nev_faj_osztaly").setText(`${karakter.Nev}, ${karakter.Faj} ${osztalyok}`)

    form.getTextField("szint").setText((karakter.SzintTotal.length > 1 ? " " : "  ") + karakter.SzintTotal)
    form.getTextField("jellem").setText(karakter.Jellem)
    form.getTextField("istenseg").setText(karakter.Isten)

    form.getTextField("vo").setText(karakter.VO.toString())
    form.getTextField("pancel").setText("   " + karakter.PancelVO)
    form.getTextField("pajzs").setText("   " + karakter.PajzsVO)
    form.getTextField("egyeb_vo").setText("   " + karakter.EgyebVO)

    form.getTextField("tul_ero").setText(`   ${karakter.Tulajdonsagok.t_ero}`)
    form.getTextField("tul_ero_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_ero))
    form.getTextField("tul_ugy").setText(`   ${karakter.Tulajdonsagok.t_ugy}`)
    form.getTextField("tul_ugy_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_ugy))
    form.getTextField("tul_egs").setText(`   ${karakter.Tulajdonsagok.t_egs}`)
    form.getTextField("tul_egs_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_egs))
    form.getTextField("tul_int").setText(`   ${karakter.Tulajdonsagok.t_int}`)
    form.getTextField("tul_int_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_int))
    form.getTextField("tul_bol").setText(`   ${karakter.Tulajdonsagok.t_bol}`)
    form.getTextField("tul_bol_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_bol))
    form.getTextField("tul_kar").setText(`   ${karakter.Tulajdonsagok.t_kar}`)
    form.getTextField("tul_kar_mod").setText(SignedNumberToText(karakter.TulajdonsagModositok.t_kar))

    form.getTextField("hp_rolls").setText(karakter.HPszintenkent.join(", "))
    form.getTextField("hp_aktualis").setText(karakter.HP.toString())

    form.getTextField("kitartas_alap").setText("   " + karakter.MentokAlap.kitartas.toString())
    form.getTextField("kitartas_mod").setText("  " + SignedNumberToText(karakter.MentoModositok.kitartas))
    form.getTextField("kitartas_sum").setText("  " + karakter.MentokModositokkal.kitartas.toString())

    form.getTextField("reflex_alap").setText("   " + karakter.MentokAlap.reflex.toString())
    form.getTextField("reflex_mod").setText("  " + SignedNumberToText(karakter.MentoModositok.reflex))
    form.getTextField("reflex_sum").setText("  " + karakter.MentokModositokkal.reflex.toString())

    form.getTextField("akaratero_alap").setText("   " + karakter.MentokAlap.akaratero.toString())
    form.getTextField("akaratero_mod").setText("  " + SignedNumberToText(karakter.MentoModositok.akaratero))
    form.getTextField("akaratero_sum").setText("  " + karakter.MentokModositokkal.akaratero.toString())

    form.getTextField("kezdemenyezes").setText(" " + SignedNumberToText(karakter.Kezdemenyezes))
    
    form.getTextField("tamadas_bonusz_alap").setText(karakter.TamadasBonuszAlap.join("/"))
    form.getTextField("tamadas_bonusz_ero").setText("  " + SignedNumberToText(karakter.TulajdonsagModositok.t_ero))
    form.getTextField("tamadas_bonusz_kozelharc").setText(karakter.KozelharciTB.join("/"))
    form.getTextField("tamadas_bonusz_ugy").setText("  " + SignedNumberToText(karakter.TulajdonsagModositok.t_ugy))
    form.getTextField("tamadas_bonusz_tavolsagi").setText(karakter.CelzoTB.join("/"))
    
    for (let i = 0; i < karakter.Kepzettsegek.length; i++) {
        const kepzettseg = karakter.Kepzettsegek[i]
        form.getTextField(`kepzettseg_${i}_nev`).setText(kepzettseg.nev)
        form.getTextField(`kepzettseg_${i}_alap`).setText(kepzettseg.alap)
        form.getTextField(`kepzettseg_${i}_bonusz`).setText(kepzettseg.bonusz)
        form.getTextField(`kepzettseg_${i}_osszes`).setText(kepzettseg.osszes)
    }
    for (let i = 0; i < karakter.Fegyverek.length; i++) {
        form.getTextField(`fegyver_${i+1}`).setText(karakter.Fegyverek[i])
    }

    for (let i = 0; i < karakter.FelszerelesViselt.length && i < 8; i++) {
        form.getTextField(`viselt_${i}`).setText(karakter.FelszerelesViselt[i])
    }
    for (let i = 0; i < karakter.FelszerelesCipelt.length && i < 8; i++) {
        form.getTextField(`cipelt_${i}`).setText(karakter.FelszerelesCipelt[i])
    }
    for (let i = 0; i < karakter.FelszerelesAprosagok.length && i < 8; i++) {
        form.getTextField(`aprosagok_${i}`).setText(karakter.FelszerelesAprosagok[i])
    }
    
    form.updateFieldAppearances(pdfFont)

    const pdfBytes = await pdfDoc.save();
    download(pdfBytes, `${karakter.Nev}_${karakter.SzintTotal}.pdf`, "application/pdf");
}