---

import AusweisLayout from "#layouts/AusweisLayout.astro";
import VerbrauchsausweisWohnenModule from "#modules/Ausweise/VerbrauchsausweisWohnenModule.svelte";
import { prisma } from "@ibcornelsen/database/server";
import { exclude } from "#lib/exclude";
import { UploadedGebaeudeBild, VerbrauchsausweisWohnenClient, GebaeudeClient, BenutzerClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types";
import { createCaller } from "#lib/caller";
import { API_UID_COOKIE_NAME } from "#lib/constants";

const uid = Astro.url.searchParams.get("uid");
let ausweis: VerbrauchsausweisWohnenClient = {} as VerbrauchsausweisWohnenClient;
let gebaeude: GebaeudeClient = {} as GebaeudeClient;
let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient = {} as GebaeudeAufnahmeClient;
let images: UploadedGebaeudeBild[] = [];

if (uid) {
	const request = await prisma.verbrauchsausweisWohnen.findUnique({
		where: { uid },
		include: {
			gebaeude_aufnahme_allgemein: {
				include: {
					GebaeudeStammdaten: {
						include: {
							gebaeude_bilder: true
						}
					}
				}
			}
		}
	})

	if (request) {
		images = (await Promise.all(request.gebaeude_aufnahme_allgemein.GebaeudeStammdaten.gebaeude_bilder.map(async bild => {
			try {
				const response = await createCaller(Astro).v1.bilder.getBase64({uid: bild.uid});
				return {
					base64: `data:image/webp;charset=utf-8;base64, ${response.base64}`,
					uid: bild.uid,
					kategorie: bild.kategorie
				}
			} catch (error) {
				return null
			}
		}))).filter(x => x !== null) as UploadedGebaeudeBild[];

		let { gebaeude_aufnahme_allgemein: {
			GebaeudeStammdaten: { gebaeude_bilder, ...request_gebaeude_stammdaten },
			...request_gebaeude_aufnahme_allgemein
		}, ...request_ausweis } = request;

		ausweis = exclude(request_ausweis, ["id", "gebaeudeaufnahme_allgemein_id", "ausweisart", "benutzer_id", "rechnungen_id"]) satisfies VerbrauchsausweisWohnenClient;
		gebaeude = exclude(request_gebaeude_stammdaten, ["id", "benutzer_id"]) satisfies GebaeudeClient;
		gebaeude_aufnahme_allgemein = exclude(request_gebaeude_aufnahme_allgemein, ["id", "gebaeude_stammdaten_id"]) satisfies GebaeudeAufnahmeClient;
	}
}

const benutzerUid = Astro.cookies.get(API_UID_COOKIE_NAME).value
let user: BenutzerClient = {} as BenutzerClient;
if (benutzerUid) {
	user = await createCaller(Astro).v1.benutzer.fromPublicId({
		uid: benutzerUid
	})
}

---

<AusweisLayout title="Verbrauchsausweis erstellen">
	<VerbrauchsausweisWohnenModule client:load images={images} ausweis={ausweis} gebaeude={gebaeude} />
</AusweisLayout>
