import { getAusweisartFromUUID } from "#components/Ausweis/types.js";
import { BASE_URI } from "#lib/constants.js";
import { transport } from "#lib/mail.js";
import {
	Benutzer,
	Enums,
	Rechnung,
	VerbrauchsausweisWohnen,
} from "#lib/client/prisma.js";
import { prisma } from "#lib/server/prisma.js";
import { getAnsichtsausweis } from "../ausweis.js";
import Mail from "nodemailer/lib/mailer/index.js";
import { shortenUID } from "#server/lib/hash.js";
import { getPaymentSuccessSubject } from "./helpers.js";
import { getPaymentInvoiceBody } from "./helpers.js";

export async function sendInvoiceMail(
	ausweis: VerbrauchsausweisWohnen,
	rechnung: Rechnung,
	user: Benutzer
) {
	const aufnahme = await prisma.aufnahme.findUnique({
		where: {
			id: ausweis.aufnahme_id,
		},
		include: {
			objekt: true,
			bilder: true,
		},
	});

	if (!aufnahme) {
		return;
	}

	const ausweisart = getAusweisartFromUUID(ausweis.uid);

	if (!ausweisart) {
		return
	}

	const attachments: Mail.Attachment[] = [];

	const id = shortenUID(ausweis.uid)


	if (ausweisart != Enums.Ausweisart.BedarfsausweisWohnen && rechnung.ausweistyp === Enums.AusweisTyp.Standard) {
		const ansichtsausweis = await getAnsichtsausweis(
			ausweis,
			aufnahme,
			aufnahme.objekt,
			aufnahme.bilder,
			user,
			ausweisart
		);

		if (ansichtsausweis) {
			attachments.push(
				{
					filename: `ID_${id}_Ansichtsausweis.pdf`,
					encoding: "binary",
					content: Buffer.from(ansichtsausweis),
					contentType: "application/pdf",
					contentDisposition: "attachment",
				},
			);
		}
	}

	await transport.sendMail({
		attachments,
		from: `"IBCornelsen" <info@online-energieausweis.org>`,
		to: user.email,
		subject: getPaymentSuccessSubject(ausweis, rechnung, ausweisart),
		cc: {
			address: rechnung.email || "",
			name: rechnung.empfaenger || "",
		},
		bcc: "info@online-energieausweis.org",
		html: `<p>Sehr geehrte*r ${user.vorname} ${user.name},</p>` + getPaymentInvoiceBody(ausweis, rechnung, ausweisart),
	});
}
