---
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import UserLayout from "#layouts/DashboardLayout.astro";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
import { omit } from "#lib/helpers";
import DashboardAusweisePruefenModule from "#modules/Dashboard/DashboardAusweisePruefenModule.svelte";
import { Enums, prisma } from "#lib/server/prisma";
import { createCaller } from "src/astro-typesafe-api-caller";

const caller = createCaller(Astro)

const params = Astro.params;
const page = Number(params.page)


let user: BenutzerClient;
try {
	user = (await caller.user.self.GET.fetch(undefined, {
	headers: {
		Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
	}
})) || {} as BenutzerClient;
} catch(e) {
	return Astro.redirect("/auth/login")
}

if (user.rolle !== Enums.BenutzerRolle.ADMIN) {
	return Astro.redirect("/dashboard")
}

const ausweise = await prisma.verbrauchsausweisWohnen.findMany({
	where: {
		benutzer: {
			uid: user.uid
		}
	},
	include: {
		aufnahme: {
			include: {
				objekt: true,
				bilder: true,
				events: true
			}
		}
	},
	skip: (page - 1) * 10,
	take: 10
})

const totalPages = await prisma.verbrauchsausweisWohnen.count({
	where: {
		benutzer: {
			uid: user.uid
		}
	}
})

const reformedAusweise = ausweise.map(ausweis => ({
	ausweis: omit(ausweis, ["aufnahme"]) as VerbrauchsausweisWohnenClient,
	aufnahme: omit(omit(ausweis.aufnahme, ["events"]), ["objekt"]) as AufnahmeClient,
	objekt: omit(ausweis.aufnahme.objekt, ["bilder"]) as ObjektClient,
	bilder: ausweis.aufnahme.bilder as unknown as UploadedGebaeudeBild[],
	events: ausweis.aufnahme.events
}))
---

<UserLayout title="Ausweise Prüfen" {user}>
	<DashboardAusweisePruefenModule totalPages={Math.ceil(totalPages / 10)} page={page} ausweise={reformedAusweise} client:load></DashboardAusweisePruefenModule>
</UserLayout>