import { getKlimafaktoren } from "#lib/Klimafaktoren";
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "#lib/client/prisma";

export function energetischeNutzflaecheVerbrauchsausweisWohnen_2023(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): number {
	return (
		ausweis.objekt.flaeche *
		(ausweis.objekt.keller ? 1.35 : 1.2)
	);
}

export async function endEnergieVerbrauchVerbrauchsausweis_2023(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): Promise<number> {
	const date = ausweis.startdatum;

	const klimafaktoren = await getKlimafaktoren(
		date,
		ausweis.objekt.plz
	);

	// Endenergieverbrauch
	// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
	let brennstoff_1 = getHeizwertfaktor(
		ausweis.brennstoff_1,
		ausweis.einheit_1
	);
	let brennstoff_2 = getHeizwertfaktor(
		ausweis.brennstoff_2,
		ausweis.einheit_2
	);

	let verbrauch_1_kwh =
		ausweis.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
	let verbrauch_2_kwh =
		ausweis.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
	let verbrauch_3_kwh =
		ausweis.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
	let verbrauch_4_kwh =
		ausweis.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
	let verbrauch_5_kwh =
		ausweis.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
	let verbrauch_6_kwh =
		ausweis.verbrauch_6 * brennstoff_2.umrechnungsfaktor;

	const energetischeNutzflaeche = energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis);

	let warmwasserZuschlag = 0;
	let leerstandsZuschlag = 0;
	let kuehlungsZuschlag = 0;
	if (ausweis.anteil_warmwasser_1 == 0) {
		warmwasserZuschlag = 20 * energetischeNutzflaeche * 3;
	}

	if (ausweis.objekt.leerstand > 0) {
		let durchschnittsKlimafaktor =
			klimafaktoren.reduce((a, b) => a + b, 0) / 3;

		leerstandsZuschlag =
			((verbrauch_1_kwh +
				verbrauch_2_kwh +
				verbrauch_3_kwh +
				verbrauch_4_kwh +
				verbrauch_5_kwh +
				verbrauch_6_kwh) *
				(ausweis.objekt.leerstand / 100)) /
			durchschnittsKlimafaktor;
	}

	if (ausweis.objekt.energiequelle_2_nutzung[3]) {
		kuehlungsZuschlag = 6 * energetischeNutzflaeche * 3;
	}

	let anteil_heizung = 1 - ausweis.anteil_warmwasser_1 / 100;
	let anteil_warmwasser = ausweis.anteil_warmwasser_1 / 100;

	let Energieverbrauchskennwert =
		(anteil_heizung *
			(verbrauch_1_kwh + verbrauch_4_kwh) *
			klimafaktoren[0] +
			anteil_warmwasser * (verbrauch_1_kwh + verbrauch_4_kwh) +
			anteil_heizung *
				(verbrauch_2_kwh + verbrauch_5_kwh) *
				klimafaktoren[1] +
			anteil_warmwasser * (verbrauch_2_kwh + verbrauch_5_kwh) +
			anteil_heizung *
				(verbrauch_3_kwh + verbrauch_6_kwh) *
				klimafaktoren[2] +
			anteil_warmwasser * (verbrauch_3_kwh + verbrauch_6_kwh) +
			warmwasserZuschlag +
			leerstandsZuschlag +
			kuehlungsZuschlag) /
		3 /
		energetischeNutzflaeche;
	

	return Energieverbrauchskennwert;
}