---
import {
	GebaeudeStammdaten,
	VerbrauchsausweisWohnen,
	prisma,
} from "@ibcornelsen/database/server";
import { generate } from "@pdfme/generator";

import VerbrauchsausweisWohnen2016Template from "../../data/templates/verbrauchsausweis-wohnen-2016.json";
import { convertAusweisData } from "#lib/AusweisData";
import { variable } from "#lib/pdf/plugins/variables";
import { text, image } from "@pdfme/schemas"

const base64 = Astro.url.searchParams.get("base64");
let ausweis:
	| (Partial<VerbrauchsausweisWohnen> & {
			gebaeude_stammdaten: Partial<GebaeudeStammdaten>;
	  })
	| null = null;
if (base64) {
	const buffer = Buffer.from(base64, "base64");
	const json = buffer.toString("utf-8");
	ausweis = JSON.parse(json);
} else {
	const uidAusweis = Astro.url.searchParams.get("ausweis_uid");

	if (!uidAusweis) {
		return Astro.redirect("/404");
	}

	ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
		where: {
			uid: uidAusweis,
		},
		include: {
			gebaeude_stammdaten: true,
		},
	});
}

if (!ausweis) {
	return Astro.redirect("/404");
}

const pdf = await generate({
	template: VerbrauchsausweisWohnen2016Template,
	plugins: { text, image, variable },
	inputs: [convertAusweisData(ausweis)],
	options: {
		author: "IB Cornelsen",
		creationDate: new Date(),
		creator: "IB Cornelsen",
		language: "de",
		title: "Verbrauchsausweis Wohnen 2016",
	},
});

return new Response(pdf, {
	headers: {
		"Content-Type": "application/pdf",
	},
});
---
