import { AufnahmeClient, BedarfsausweisWohnenClient, BenutzerClient, BildClient, getAusweisartFromUUID, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js";
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js";
import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js";
import { Enums, prisma } from "#lib/server/prisma.js";

/**
 * Gibt den richtigen Prisma Adapter für die Ausweisart basierend auf der UID zurück, oder null bei einer falschen UID.
 * @param uid Die Ausweis UID
 */
export function getPrismaAusweisAdapter(uid: string) {
	const ausweisart = getAusweisartFromUUID(uid);

	if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
		return prisma.verbrauchsausweisWohnen
	} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
		return prisma.verbrauchsausweisGewerbe
	} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
		return prisma.bedarfsausweisWohnen
	}
}

/**
 * Gibt den richtigen Ansichtsausweis basierend auf der Ausweisart zurück.
 * @param ausweis 
 */
export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromUUID(ausweis.uid)) {
	if (!ausweisart) {
		return null
	}

	if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
		return await pdfVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, bilder, user)
	} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
		return await pdfVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, bilder, user)
	}

	return null
}

/**
 * Gibt das richtige Datenblatt basierend auf der Ausweisart zurück.
 * @param ausweis 
 */
export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromUUID(ausweis.uid)) {
	if (!ausweisart) {
		return null
	}

	if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
		return await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder)
	} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
		return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, user, bilder)
	}

	return null
}