package fi.lpam.tulostajat;

import fi.lpam.dataluokat.RaporttiRivi;

import java.awt.print.PrinterJob;
import java.time.LocalDate;
import java.util.ArrayList;

import fi.lpam.gui.virheDialogit.SiirtoVirhe;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.printing.PDFPageable;

@SuppressWarnings("DuplicatedCode")
public class KuljetusRaporttiTulostaja extends Tulostaja {
    public static void luoRaportti(ArrayList<RaporttiRivi> raporttiRivit, LocalDate alkuPvm, LocalDate loppuPvm) {
        int rivitPerSivu = 44;
        try (PDDocument dokumentti = new PDDocument())  {
            PDPage sivu = new PDPage();
            dokumentti.addPage(sivu);
            PDPageContentStream sisältö = new PDPageContentStream(dokumentti, sivu);
            sisältö.beginText();


            sisältö.setFont(fontti, fonttiKoko);
            sisältö.setLeading(leading);
            sisältö.newLineAtOffset(25,750);
            sisältö.showText("Raportti aikaväliltä " + alkuPvm + " - " + loppuPvm);
            sisältö.newLineAtOffset(0, -25);

            int riviLaskuri = 2;
            for (RaporttiRivi rivi : raporttiRivit) {
                String[] teksti =  rivi.toString().split("\n");
                for (String t : teksti) {
                    if (riviLaskuri % rivitPerSivu == 0) {
                        sisältö.endText();
                        sisältö.close();
                        PDPage uusiSivu = new PDPage();
                        dokumentti.addPage(uusiSivu);
                        sisältö =  new PDPageContentStream(dokumentti, uusiSivu);
                        sisältö.beginText();
                        sisältö.setFont(fontti, fonttiKoko);
                        sisältö.setLeading(leading);
                        sisältö.newLineAtOffset(25,750);
                    }
                    sisältö.showText(t);
                    riviLaskuri++;
                    sisältö.newLine();
                }
                sisältö.newLineAtOffset(0, -5);
            }
            sisältö.endText();
            sisältö.close();

            PrinterJob tuloste = PrinterJob.getPrinterJob();
            tuloste.setPageable(new PDFPageable(dokumentti));
            if (tuloste.printDialog()) {
                tuloste.print();
            }
        }
        catch (Exception e) {
            SiirtoVirhe virhe = new SiirtoVirhe(e);
            virhe.showAndWait();
        }
    }
}