import { A7A2BerechnungWaermequellenSolareEinstrahlung } from "#lib/Berechnungen/BedarfsausweisWohnen/A7A2BerechnungWaermequellenSolareEinstrahlung.js";
import { A8BerechnungWaermequellenAusAnlagentechnikHeizung } from "#lib/Berechnungen/BedarfsausweisWohnen/A8BerechnungWaermequellenAusAnlagentechnikHeizung.js";
import { A10BerechnungWaermequellenAnlagentechnikTrinkwarmwasser } from "#lib/Berechnungen/BedarfsausweisWohnen/A10BerechnungWaermequellenAnlagentechnikTrinkwarmwasser.js";
import { result } from "node_modules/cypress/types/lodash/index.js";

export function A11BerechnungWaermequellenZusammenstellung() {

    const einstrahlung = A7A2BerechnungWaermequellenSolareEinstrahlung();
    const summeErgebnisseJanuar = einstrahlung.summeErgebnisseJanuar;
    const summeErgebnisseFebruar = einstrahlung.summeErgebnisseFebruar;
    const summeErgebnisseMaerz = einstrahlung.summeErgebnisseMaerz;
    const summeErgebnisseApril = einstrahlung.summeErgebnisseApril;
    const summeErgebnisseMai = einstrahlung.summeErgebnisseMai;
    const summeErgebnisseJuni = einstrahlung.summeErgebnisseJuni;
    const summeErgebnisseJuli = einstrahlung.summeErgebnisseJuli;
    const summeErgebnisseAugust = einstrahlung.summeErgebnisseAugust;
    const summeErgebnisseSeptember = einstrahlung.summeErgebnisseSeptember;
    const summeErgebnisseOktober = einstrahlung.summeErgebnisseOktober;
    const summeErgebnisseNovember = einstrahlung.summeErgebnisseNovember;
    const summeErgebnisseDezember = einstrahlung.summeErgebnisseDezember;

    const summeErgebnisseGesamt = summeErgebnisseJanuar + summeErgebnisseFebruar + summeErgebnisseMaerz + 
    summeErgebnisseApril + summeErgebnisseMai + summeErgebnisseJuni + summeErgebnisseJuli + summeErgebnisseAugust + 
    summeErgebnisseSeptember + summeErgebnisseOktober + summeErgebnisseNovember + summeErgebnisseDezember;

    const result = A8BerechnungWaermequellenAusAnlagentechnikHeizung();
   
    const ausweis = {}; // Replace with actual BedarfsausweisWohnenClient object
    const gebaeude_aufnahme = {}; // Replace with actual AufnahmeClient object
    const resultTrinkwarmwasser = A10BerechnungWaermequellenAnlagentechnikTrinkwarmwasser(ausweis, gebaeude_aufnahme);
    const  WaermeQuellenAnlagentechnikTrinkwarmwasser = resultTrinkwarmwasser.WaermeQuellenAnlagentechnikTrinkwarmwasser;

    const WaermeQuellenAnlagentechnikGesamt = {
        Januar: result.WaermeQuellenAnlagentechnikHeizungJanuar + WaermeQuellenAnlagentechnikTrinkwarmwasser.Januar,
        Februar: result.WaermeQuellenAnlagentechnikHeizungFebruar + WaermeQuellenAnlagentechnikTrinkwarmwasser.Februar,
        Maerz: result.WaermeQuellenAnlagentechnikHeizungMaerz + WaermeQuellenAnlagentechnikTrinkwarmwasser.Maerz,
        April: result.WaermeQuellenAnlagentechnikHeizungApril + WaermeQuellenAnlagentechnikTrinkwarmwasser.April,
        Mai: result.WaermeQuellenAnlagentechnikHeizungMai + WaermeQuellenAnlagentechnikTrinkwarmwasser.Mai,
        Juni: result.WaermeQuellenAnlagentechnikHeizungJuni + WaermeQuellenAnlagentechnikTrinkwarmwasser.Juni,
        Juli: result.WaermeQuellenAnlagentechnikHeizungJuli + WaermeQuellenAnlagentechnikTrinkwarmwasser.Juli,
        August: result.WaermeQuellenAnlagentechnikHeizungAugust + WaermeQuellenAnlagentechnikTrinkwarmwasser.August,
        September: result.WaermeQuellenAnlagentechnikHeizungSeptember + WaermeQuellenAnlagentechnikTrinkwarmwasser.September,
        Oktober: result.WaermeQuellenAnlagentechnikHeizungOktober + WaermeQuellenAnlagentechnikTrinkwarmwasser.Oktober,
        November: result.WaermeQuellenAnlagentechnikHeizungNovember + WaermeQuellenAnlagentechnikTrinkwarmwasser.November,
        Dezember: result.WaermeQuellenAnlagentechnikHeizungDezember + WaermeQuellenAnlagentechnikTrinkwarmwasser.Dezember
    };
    const summeWaermeQuellenAnlagentechnikGesamt = Object.values(WaermeQuellenAnlagentechnikGesamt).reduce((acc, value) => acc + value, 0);


    // Beispielwerte Planung werden aus Eingabe geholt
    let NettoGrundflaeche = 154.2;
    let WaermeQuellenBewohner = 45; // bis 2 Wohneinheiten sonst 90

    let 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 interneWaermeQuellenProMonat = {
        Januar: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Januar) / 1000,
        Februar: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Februar) / 1000,
        Maerz: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Maerz) / 1000,
        April: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.April) / 1000,
        Mai: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Mai) / 1000,
        Juni: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Juni) / 1000,
        Juli: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Juli) / 1000,
        August: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.August) / 1000,
        September: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.September) / 1000,
        Oktober: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Oktober) / 1000,
        November: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.November) / 1000,
        Dezember: (NettoGrundflaeche * WaermeQuellenBewohner * TageMonat.Dezember) / 1000
    };

    const interneWaermeQuellenGesamt = Object.values(interneWaermeQuellenProMonat).reduce((acc, value) => acc + value, 0);

    const WaermeQuellenGesamt = {
        Januar: interneWaermeQuellenProMonat.Januar + summeErgebnisseJanuar + WaermeQuellenAnlagentechnikGesamt.Januar,
        Februar: interneWaermeQuellenProMonat.Februar + summeErgebnisseFebruar + WaermeQuellenAnlagentechnikGesamt.Februar,
        Maerz: interneWaermeQuellenProMonat.Maerz + summeErgebnisseMaerz + WaermeQuellenAnlagentechnikGesamt.Maerz,
        April: interneWaermeQuellenProMonat.April + summeErgebnisseApril + WaermeQuellenAnlagentechnikGesamt.April,
        Mai: interneWaermeQuellenProMonat.Mai + summeErgebnisseMai + WaermeQuellenAnlagentechnikGesamt.Mai,
        Juni: interneWaermeQuellenProMonat.Juni + summeErgebnisseJuni + WaermeQuellenAnlagentechnikGesamt.Juni,
        Juli: interneWaermeQuellenProMonat.Juli + summeErgebnisseJuli + WaermeQuellenAnlagentechnikGesamt.Juli,
        August: interneWaermeQuellenProMonat.August + summeErgebnisseAugust + WaermeQuellenAnlagentechnikGesamt.August,
        September: interneWaermeQuellenProMonat.September + summeErgebnisseSeptember + WaermeQuellenAnlagentechnikGesamt.September,
        Oktober: interneWaermeQuellenProMonat.Oktober + summeErgebnisseOktober + WaermeQuellenAnlagentechnikGesamt.Oktober,
        November: interneWaermeQuellenProMonat.November + summeErgebnisseNovember + WaermeQuellenAnlagentechnikGesamt.November,
        Dezember: interneWaermeQuellenProMonat.Dezember + summeErgebnisseDezember + WaermeQuellenAnlagentechnikGesamt.Dezember
    };

    const summeWaermeQuellenGesamt = Object.values(WaermeQuellenGesamt).reduce((acc, value) => acc + value, 0);

    const WaermeQuellenGesamtLeistung = Object.keys(WaermeQuellenGesamt).reduce((acc: { [key: string]: number }, month) => {
        acc[month] = (WaermeQuellenGesamt[month as keyof typeof WaermeQuellenGesamt] / (24 * TageMonat[month as keyof typeof TageMonat]) * 1000);
        return acc;
    }, {});

    const summeWaermeQuellenGesamtLeistung = Object.values(WaermeQuellenGesamtLeistung).reduce((acc, value) => acc + value, 0);

    return {
        TageMonat,
        summeErgebnisseJanuar,
        summeErgebnisseFebruar,
        summeErgebnisseMaerz,
        summeErgebnisseApril,
        summeErgebnisseMai,
        summeErgebnisseJuni,
        summeErgebnisseJuli,
        summeErgebnisseAugust,
        summeErgebnisseSeptember,
        summeErgebnisseOktober,
        summeErgebnisseNovember,
        summeErgebnisseDezember,
        interneWaermeQuellenProMonat,
        NettoGrundflaeche,
        WaermeQuellenBewohner,
        WaermeQuellenAnlagentechnikGesamt,
        WaermeQuellenGesamt,
        WaermeQuellenGesamtLeistung,
        summeErgebnisseGesamt,
        interneWaermeQuellenGesamt,
        summeWaermeQuellenAnlagentechnikGesamt,
        summeWaermeQuellenGesamt,
        summeWaermeQuellenGesamtLeistung
    }

}