package org.vaadin.firitin.htmlextensions;

import com.vaadin.flow.router.Route;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
import org.vaadin.firitin.components.button.PrintPdfButton;
import org.vaadin.firitin.components.orderedlayout.VVerticalLayout;

import java.io.IOException;
import java.io.OutputStream;
import java.time.LocalDateTime;

@Route
public class PrintPDFView extends VVerticalLayout {
    public PrintPDFView() {
        add("Click button below to print current time on an A4 PDF generated by PdfBox. Uses infamous hidden iframe hack.");

        add(new PrintPdfButton(outputStream -> {
            writePDF("It is " + LocalDateTime.now(), outputStream);
        }));

    }

    private static void writePDF(String content, OutputStream out) {
        try {
            PDDocument document = new PDDocument();
            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);
            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            contentStream.beginText();
            contentStream.newLineAtOffset(20,700);
            contentStream.setFont(new PDType1Font(Standard14Fonts.FontName.COURIER), 16);
            contentStream.showText(content);
            contentStream.endText();
            contentStream.close();
            document.save(out);
            document.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}
