import { A6BerechnungWaermeTransferMaxStroemeLueftungGesamt } from "#lib/Berechnungen/BedarfsausweisWohnen/A6BerechnungWaermeTransferMaxStroemeLueftungGesamt.js";
import { A9BerechnungNutzenergiebedarfTrinkwarmwasser } from "#lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.js";
import { A12BerechnungNutzenergiebedarfHeizung } from "#lib/Berechnungen/BedarfsausweisWohnen/A12BerechnungNutzenergiebedarfHeizung.js";
import { A13BerechnungRechnerischeLaufzeitHeizung } from "#lib/Berechnungen/BedarfsausweisWohnen/A13BerechnungRechnerischeLaufzeitHeizung.js";
import { funktionKorrekturfaktorMittlereBelastungT32 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionKorrekturfaktorMittlereBelastungT32.js";
import { funktionNennleistungWaermeerzeugerWarmwasserT139 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionNennleistungWaermeerzeugerWarmwasserT139.js";
import { funktionAufwandszahlErzeugungHeizungT77 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionAufwandszahlErzeugungHeizungT77.js";


export function A14BerechnungAufwandszahlenMittlereBelastung() {
    
    const result = A12BerechnungNutzenergiebedarfHeizung(); 
    const gesamtHeizstunden = result.gesamtHeizstunden;
    const gesamtNutzenergieHeizung = result.gesamtNutzenergieHeizung;

    const resultMaximaleHeizlast = A6BerechnungWaermeTransferMaxStroemeLueftungGesamt();
    const maximaleHeizlast = resultMaximaleHeizlast.maximaleHeizlast;

    const resultRechnerischeLaufzeitHeizung = A13BerechnungRechnerischeLaufzeitHeizung();
    const rechnerischeLaufzeitGesamt = resultRechnerischeLaufzeitHeizung.rechnerischeLaufzeitGesamt;

    const resultNutzenergiebedarfTrinkwarmwasser = A9BerechnungNutzenergiebedarfTrinkwarmwasser();
    const flaechenBezogenerWaermebedarf = resultNutzenergiebedarfTrinkwarmwasser.flaechenBezogenerWaermebedarf;

    // Planungswerte aus Eingabe, Tabellen 20, 21, 22, C12, 30, 31, 41, 49, 50, 51, 52, 53

    let NettoGrundflaeche = 154.2;
    let anlass = "Neubau";
    let ZuschlagsFaktorErzeugung = 0;

    const PlanungswerteUebergabeVerteilungHeizung = [
        {
            Anlage: "Erzeuger 1 - zentral",
            VersorgteFlaeche: 0.7,
            UebergabeSystem: "Heizkörper",
            rohrsystem: "Zwei-Rohr-System",
            rohrnetztyp: "I (Etagenringtyp)",
            anzahlHeizflaechen: "bis 10",
            hydraulischerAbgleich: "Abgleich statisch je Heizkörper/Heizfläche und Gruppenabgleich statisch (z.B. mit Strangregulierventil)",
            raumtemperaturRegelung: "P-Regler",
            ueberTemperatur: "55°C/45°C",
            waermeverlustAußenbauteile: "Radiatorposition Außenwand",
            intermittierenderBetrieb: "-",
            einzelraumregelSysteme: "-",
            verteilung: "Verteilleitungen im beheizten Bereich",
            PufferSpeicherHeizung: 0,
            ehs0: 1,
            ehce0: 1.042,
            Δehce1: 0.015,
            Δehce2: 0.009,
            Δehce3: 0,
            Δehce5: 0,
            Δehcehydr: 0.018,
            fhydr: 1.02,
            ehd0: 1.049
            
        },
        {
            Anlage: "Erzeuger 1 - zentral",
            VersorgteFlaeche: 0.2,
            UebergabeSystem: "Fußbodenheizung Nasssystem",
            rohrnetztyp: "IIb (Etagenverteilertyp Fußbodenheizung)",
            raumtemperaturRegelung: "ungeregelt, mit zentraler Vorlauftemperaturregelung",
            ueberTemperatur: "35°C/28°C",
            waermeverlustAngrenzendeBauteile: "integrierte Heizfläche mit Mindestdämmung nach DIN EN 1264 (alle Teile)",
            intermittierenderBetrieb: "-",
            einzelraumregelSysteme: "-",
            verteilung: "Verteilleitungen im beheizten Bereich",
            PufferSpeicherHeizung: 0,
            ehs0: 1,
            ehce0: 1.149,
            Δehce1: 0.021,
            Δehce2: 0.015,
		    Δehce3: 0,
		    Δehce5: 0,
            Δehcehydr: 0,
            fhydr: 1,
            ehd0: 1.004
           
        },
        {
            Anlage: "Erzeuger 2 - dezentral",
            VersorgteFlaeche: 0.1,
            Heizungsart: "Elektro-Direktheizung, PI-Regler (mit Optimierung)",
            Bereich: "Außenwandbereich",
            intermittierenderBetrieb: "Nein",
            ehs0: 1,
            ehce0: 1.042,
            Δehce1: 0,
            Δehce2: 0,
		    Δehce3: 0,
		    Δehce5: 0,
            Δehcehydr: 0,
            fhydr: 1,
            ehd0: 1
           
        }
    ];

    const resultfunktionNennleistungWaermeerzeugerWarmwasserT139 = funktionNennleistungWaermeerzeugerWarmwasserT139(NettoGrundflaeche, flaechenBezogenerWaermebedarf);
    const NennleistungWaermeerzeugerWarmwasser = resultfunktionNennleistungWaermeerzeugerWarmwasserT139;
    
    
    if (anlass === "Neubau") {
        ZuschlagsFaktorErzeugung = 1.1;
    }
    else {
        ZuschlagsFaktorErzeugung = 1.5;
    }
    
    const NennleistungWaermeerzeugerHeizung = resultMaximaleHeizlast.maximaleHeizlast / 1000;
    const NennleistungWaermeerzeuger = ZuschlagsFaktorErzeugung * Math.max(NennleistungWaermeerzeugerWarmwasser, NennleistungWaermeerzeugerHeizung);    

const ErgebnisseAufwandsZahlenBelastungHeizung = PlanungswerteUebergabeVerteilungHeizung.map((system: any) => {
const mittlereBelastungUebergabeHeizung = (gesamtNutzenergieHeizung / (gesamtHeizstunden * maximaleHeizlast)) * 1000 * system.VersorgteFlaeche;
const AufwandsZahlUebergabeHeizung = system.ehce0 + system.Δehce1 + system.Δehce2 + system.Δehce3 + system.Δehce5 + system.Δehcehydr;
const mittlereBelastungVerteilungHeizung = mittlereBelastungUebergabeHeizung * AufwandsZahlUebergabeHeizung * system.fhydr;
const flaechenbezogeneLeistungUebergabeHeizung = (maximaleHeizlast / NettoGrundflaeche) * AufwandsZahlUebergabeHeizung;

const KorrekturfaktorMittlereBelastung = funktionKorrekturfaktorMittlereBelastungT32(system.verteilung, system.rohrnetztyp, system.ueberTemperatur, mittlereBelastungVerteilungHeizung) || 0;
const AufwandsZahlVerteilungHeizungKorrektur = system.ehd0 * KorrekturfaktorMittlereBelastung;
const AufwandsZahlVerteilungHeizungKorrekturZwei = 1 + (AufwandsZahlVerteilungHeizungKorrektur - 1) * (50/flaechenbezogeneLeistungUebergabeHeizung);
const AufwandsZahlVerteilungHeizung = (AufwandsZahlVerteilungHeizungKorrekturZwei - 1) * (8760/rechnerischeLaufzeitGesamt) + 1;
const flaechenbezogeneLeistungVerteilungHeizung = flaechenbezogeneLeistungUebergabeHeizung * AufwandsZahlVerteilungHeizung;

const mittlereBelastungSpeicherungHeizung = mittlereBelastungVerteilungHeizung * AufwandsZahlVerteilungHeizung;
const AufwandsZahlSpeicherungHeizung = system.ehs0;
const flaechenbezogeneLeistungSpeicherungHeizung = flaechenbezogeneLeistungVerteilungHeizung * AufwandsZahlSpeicherungHeizung;

const mittlereBelastungErzaegungHeizung = mittlereBelastungSpeicherungHeizung * AufwandsZahlSpeicherungHeizung;

const AufwandsZahlErzeugungHeizung = funktionAufwandszahlErzeugungHeizungT77(NennleistungWaermeerzeuger, mittlereBelastungErzaegungHeizung);

    return {
        Bezeichnung: system.Anlage + " - " + system.VersorgteFlaeche * 100 + " % versorgte Fläche - " + (system.UebergabeSystem ? system.UebergabeSystem : system.Heizungsart),
        mittlereBelastungUebergabeHeizung: mittlereBelastungUebergabeHeizung,
        VersorgteFlaeche: system.VersorgteFlaeche,
        AufwandsZahlUebergabeHeizung: AufwandsZahlUebergabeHeizung,
        mittlereBelastungVerteilungHeizung: mittlereBelastungVerteilungHeizung,
        flaechenbezogeneLeistungUebergabeHeizung: flaechenbezogeneLeistungUebergabeHeizung,
        AufwandsZahlVerteilungHeizung: AufwandsZahlVerteilungHeizung,
        flaechenbezogeneLeistungVerteilungHeizung: flaechenbezogeneLeistungVerteilungHeizung,
        mittlereBelastungSpeicherungHeizung: mittlereBelastungSpeicherungHeizung,
        AufwandsZahlSpeicherungHeizung: AufwandsZahlSpeicherungHeizung,
        flaechenbezogeneLeistungSpeicherungHeizung: flaechenbezogeneLeistungSpeicherungHeizung,
        mittlereBelastungErzaegungHeizung: mittlereBelastungErzaegungHeizung,
        AufwandsZahlErzeugungHeizung: AufwandsZahlErzeugungHeizung
       
    };
});


    return {

        gesamtHeizstunden,
        maximaleHeizlast,
        gesamtNutzenergieHeizung,
        ErgebnisseAufwandsZahlenBelastungHeizung,
        NennleistungWaermeerzeuger
    }

}