import { linearInterpolation } from "js-interpolate"

/**
 * Implementierung Tabelle E.7 — Tabelle A.9 - Trinkwassererwärmung - Berechnung des Wärmebedarfs zur Trinkwassererwärmung
 * 
 */
export function A9BerechnungNutzenergiebedarfTrinkwarmwasser() {
	// A_NGF aus Eingabe
	const bezugsflaeche = 154.2;

	const einheiten = 1;

	// A_NGF,WE,m
	const flaecheProEinheit = bezugsflaeche / einheiten;

	// q_w,b
	let flaechenBezogenerWaermebedarf: number;

	if (flaecheProEinheit < 10) {
		flaechenBezogenerWaermebedarf =  16.5
	} else if (flaecheProEinheit >= 160) {
		flaechenBezogenerWaermebedarf = 8.5
	} else {
		flaechenBezogenerWaermebedarf = linearInterpolation([{
			x: 10,
			y: 16
		}, {
			x: 150,
			y: 9
		}], flaecheProEinheit)
	}

	// Q_w,b
	// Trinkwasser Wärmebedarf übers gesamte Jahr gerechnet. Falls ein bestimmter Monat gesucht wird kann man einfach (Q_w,b / 365 * d_mth) rechnen.
	const tageMonat = {
		Januar: 31,
		Februar: 28,
		Maerz: 31,
		April: 30,
		Mai: 31,
		Juni: 30,
		Juli: 31,
		August: 31,
		September: 30,
		Oktober: 31,
		November: 30,
		Dezember: 31
	};

	const trinkwasserWaermebedarf = Object.fromEntries(
		Object.entries(tageMonat).map(([monat, tage]) => [
			monat,
			(bezugsflaeche * flaechenBezogenerWaermebedarf * tage) / 365
		])
	);

	const trinkwasserWaermebedarfJahr = Object.values(trinkwasserWaermebedarf).reduce((sum, value) => sum + value, 0);

	return {
		trinkwasserWaermebedarf,
		flaechenBezogenerWaermebedarf,
		bezugsflaeche,
		trinkwasserWaermebedarfJahr
	}
}