import { test, describe, expect } from "bun:test";
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
import { importVerbrauchsausweisWohnenAltesSystem, verbrauchsausweisWohnenImportTranslate } from "#lib/altes-system/import.js";

describe('Energieverbrauch', async () => {
	const request = await importVerbrauchsausweisWohnenAltesSystem();

	for (const ausweis of request.data) {
		if (ausweis.ausweisart !== "VA" || !ausweis.objekt_plz) {
			continue;
		}

		const ausweisNeu = verbrauchsausweisWohnenImportTranslate(ausweis);
		const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweisNeu);
		const berechnungenAlt = ausweis.calculations;

		let missingKlimafaktoren: boolean = false;

		test("Klimafaktoren", async () => {
			console.log("PLZ: " + ausweisNeu.aufnahme.plz)
			console.log("Startdatum: " + ausweisNeu.startdatum)
			expect(berechnungen?.klimafaktoren).toHaveLength(3)
			try {
				expect(berechnungen?.klimafaktoren.map(x => x.klimafaktor)).toEqual(berechnungenAlt.klimafaktoren)
			} catch(e) {
				missingKlimafaktoren = true;
			}
		})
	
	
		test.skipIf(missingKlimafaktoren)("Endenergieverbrauch", async () => {
			expect(berechnungen?.endEnergieVerbrauchGesamt).toBeCloseTo(berechnungenAlt.endEnergieVerbrauchGesamt, 0)
		})
	
		test.skipIf(missingKlimafaktoren)("Primärenergieverbrauch", async () => {
			expect(berechnungen?.primaerEnergieVerbrauchGesamt).toBeCloseTo(berechnungenAlt.primaerEnergieVerbrauchGesamt, 0)
		})
	}
})