import { funktionAusnutzungsgradT18 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionAusnutzungsgradT18.js";
import { funktionWaermesenkenA8A12 } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionWaermesenkenA8A12.js";
import { A11BerechnungWaermequellenZusammenstellung } from "#lib/Berechnungen/BedarfsausweisWohnen/A11BerechnungWaermequellenZusammenstellung.js";

export function A12BerechnungNutzenergiebedarfHeizung() {

const result = funktionWaermesenkenA8A12();
const belastungsgrade = result.belastungsgrade;
const bilanzInnenTemperaturen = result.bilanzInnenTemperaturen;
const waermeSenken = result.waermeSenken;
const maximalerWaermestromGesamt = result.maximalerWaermestromGesamt;
const minimaleAussentemperatur = result.minimaleAussentemperatur;
const innenTemperatur = result.innenTemperatur;
const ZeitKonstante = result.ZeitKonstante;

const resultWaermeQuellen = A11BerechnungWaermequellenZusammenstellung();
const waermeQuellen = resultWaermeQuellen.WaermeQuellenGesamtLeistung;

let nutzenergieHeizungJanuar = 0;
let nutzenergieHeizungFebruar = 0;
let nutzenergieHeizungMärz = 0;
let nutzenergieHeizungApril = 0;
let nutzenergieHeizungMai = 0;
let nutzenergieHeizungJuni = 0;
let nutzenergieHeizungJuli = 0;
let nutzenergieHeizungAugust = 0;
let nutzenergieHeizungSeptember = 0;
let nutzenergieHeizungOktober = 0;
let nutzenergieHeizungNovember = 0;
let nutzenergieHeizungDezember = 0;

let waermequellensenkenverhaeltnisJanuar = 0;
let waermequellensenkenverhaeltnisFebruar = 0;
let waermequellensenkenverhaeltnisMärz = 0;
let waermequellensenkenverhaeltnisApril = 0;
let waermequellensenkenverhaeltnisMai = 0;
let waermequellensenkenverhaeltnisJuni = 0;
let waermequellensenkenverhaeltnisJuli = 0;
let waermequellensenkenverhaeltnisAugust = 0;
let waermequellensenkenverhaeltnisSeptember = 0;
let waermequellensenkenverhaeltnisOktober = 0;
let waermequellensenkenverhaeltnisNovember = 0;
let waermequellensenkenverhaeltnisDezember = 0;

let ausnutzungsgradJanuar = 0;
let ausnutzungsgradFebruar = 0;
let ausnutzungsgradMärz = 0;
let ausnutzungsgradApril = 0;
let ausnutzungsgradMai = 0;
let ausnutzungsgradJuni = 0;
let ausnutzungsgradJuli = 0;
let ausnutzungsgradAugust = 0;
let ausnutzungsgradSeptember = 0;
let ausnutzungsgradOktober = 0;
let ausnutzungsgradNovember = 0;
let ausnutzungsgradDezember = 0;

let faktorBelastungJanuar = 0; 
let faktorBelastungFebruar = 0;
let faktorBelastungMärz = 0;
let faktorBelastungApril = 0;
let faktorBelastungMai = 0;
let faktorBelastungJuni = 0;
let faktorBelastungJuli = 0;
let faktorBelastungAugust = 0;
let faktorBelastungSeptember = 0;
let faktorBelastungOktober = 0;
let faktorBelastungNovember = 0;
let faktorBelastungDezember = 0;

let heizstundenJanuar = 0;
let heizstundenFebruar = 0;
let heizstundenMärz = 0;
let heizstundenApril = 0;
let heizstundenMai = 0;
let heizstundenJuni = 0;
let heizstundenJuli = 0;
let heizstundenAugust = 0;
let heizstundenSeptember = 0;
let heizstundenOktober = 0;
let heizstundenNovember = 0;
let heizstundenDezember = 0;

let monatlicheBelastungJanuar = 0;
let monatlicheBelastungFebruar = 0;
let monatlicheBelastungMärz = 0;
let monatlicheBelastungApril = 0;
let monatlicheBelastungMai = 0;
let monatlicheBelastungJuni = 0;
let monatlicheBelastungJuli = 0;
let monatlicheBelastungAugust = 0;
let monatlicheBelastungSeptember = 0;
let monatlicheBelastungOktober = 0;
let monatlicheBelastungNovember = 0;
let monatlicheBelastungDezember = 0;

  waermequellensenkenverhaeltnisJanuar = waermeQuellen.Januar / waermeSenken.Januar;
  waermequellensenkenverhaeltnisFebruar = waermeQuellen.Februar / waermeSenken.Februar;
  waermequellensenkenverhaeltnisMärz = waermeQuellen.Maerz / waermeSenken.März;
  waermequellensenkenverhaeltnisApril = waermeQuellen.April / waermeSenken.April;
  waermequellensenkenverhaeltnisMai = waermeQuellen.Mai / waermeSenken.Mai;
  waermequellensenkenverhaeltnisJuni = waermeQuellen.Juni / waermeSenken.Juni;
  waermequellensenkenverhaeltnisJuli = waermeQuellen.Juli / waermeSenken.Juli;
  waermequellensenkenverhaeltnisAugust = waermeQuellen.August / waermeSenken.August;
  waermequellensenkenverhaeltnisSeptember = waermeQuellen.September / waermeSenken.September;
  waermequellensenkenverhaeltnisOktober = waermeQuellen.Oktober / waermeSenken.Oktober;
  waermequellensenkenverhaeltnisNovember = waermeQuellen.November / waermeSenken.November;
  waermequellensenkenverhaeltnisDezember = waermeQuellen.Dezember / waermeSenken.Dezember;

  ausnutzungsgradJanuar = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisJanuar);
  ausnutzungsgradFebruar = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisFebruar);
  ausnutzungsgradMärz = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisMärz);
  ausnutzungsgradApril = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisApril);
  ausnutzungsgradMai = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisMai);
  ausnutzungsgradJuni = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisJuni);
  ausnutzungsgradJuli = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisJuli);
  ausnutzungsgradAugust = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisAugust);
  ausnutzungsgradSeptember = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisSeptember);
  ausnutzungsgradOktober = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisOktober);
  ausnutzungsgradNovember = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisNovember);
  ausnutzungsgradDezember = funktionAusnutzungsgradT18(ZeitKonstante, waermequellensenkenverhaeltnisDezember);

  faktorBelastungJanuar = Math.max(1 - (waermequellensenkenverhaeltnisJanuar * ausnutzungsgradJanuar), 0);
  faktorBelastungFebruar = Math.max(1 - (waermequellensenkenverhaeltnisFebruar * ausnutzungsgradFebruar), 0);
  faktorBelastungMärz = Math.max(1 - (waermequellensenkenverhaeltnisMärz * ausnutzungsgradMärz), 0);
  faktorBelastungApril = Math.max(1 - (waermequellensenkenverhaeltnisApril * ausnutzungsgradApril), 0);
  faktorBelastungMai = Math.max(1 - (waermequellensenkenverhaeltnisMai * ausnutzungsgradMai), 0);
  faktorBelastungJuni = Math.max(1 - (waermequellensenkenverhaeltnisJuni * ausnutzungsgradJuni), 0);
  faktorBelastungJuli = Math.max(1 - (waermequellensenkenverhaeltnisJuli * ausnutzungsgradJuli), 0);
  faktorBelastungAugust = Math.max(1 - (waermequellensenkenverhaeltnisAugust * ausnutzungsgradAugust), 0);
  faktorBelastungSeptember = Math.max(1 - (waermequellensenkenverhaeltnisSeptember * ausnutzungsgradSeptember), 0);
  faktorBelastungOktober = Math.max(1 - (waermequellensenkenverhaeltnisOktober * ausnutzungsgradOktober), 0);
  faktorBelastungNovember = Math.max(1 - (waermequellensenkenverhaeltnisNovember * ausnutzungsgradNovember), 0);
  faktorBelastungDezember = Math.max(1 - (waermequellensenkenverhaeltnisDezember * ausnutzungsgradDezember), 0);

  monatlicheBelastungJanuar = belastungsgrade.Januar * faktorBelastungJanuar;
  monatlicheBelastungFebruar = belastungsgrade.Februar * faktorBelastungFebruar;
  monatlicheBelastungMärz = belastungsgrade.März * faktorBelastungMärz;
  monatlicheBelastungApril = belastungsgrade.April * faktorBelastungApril;
  monatlicheBelastungMai = belastungsgrade.Mai * faktorBelastungMai;
  monatlicheBelastungJuni = belastungsgrade.Juni * faktorBelastungJuni;
  monatlicheBelastungJuli = belastungsgrade.Juli * faktorBelastungJuli;
  monatlicheBelastungAugust = belastungsgrade.August * faktorBelastungAugust;
  monatlicheBelastungSeptember = belastungsgrade.September * faktorBelastungSeptember;
  monatlicheBelastungOktober = belastungsgrade.Oktober * faktorBelastungOktober;
  monatlicheBelastungNovember = belastungsgrade.November * faktorBelastungNovember;
  monatlicheBelastungDezember = belastungsgrade.Dezember * faktorBelastungDezember;

  if (monatlicheBelastungJanuar > 0.05) {heizstundenJanuar = 31 * 24;} else {heizstundenJanuar = (monatlicheBelastungJanuar / 0.05) * 31 * 24;}
        if (monatlicheBelastungFebruar > 0.05) {heizstundenFebruar = 28 * 24;} else {heizstundenFebruar = (monatlicheBelastungFebruar / 0.05) * 28 * 24;}
        if (monatlicheBelastungMärz > 0.05) {heizstundenMärz = 31 * 24;} else {heizstundenMärz = (monatlicheBelastungMärz / 0.05) * 31 * 24;}
        if (monatlicheBelastungApril > 0.05) {heizstundenApril = 30 * 24;} else {heizstundenApril = (monatlicheBelastungApril / 0.05) * 30 * 24;}
        if (monatlicheBelastungMai > 0.05) {heizstundenMai = 31 * 24;} else {heizstundenMai = (monatlicheBelastungMai / 0.05) * 31 * 24;}
        if (monatlicheBelastungJuni > 0.05) {heizstundenJuni = 30 * 24;} else {heizstundenJuni = (monatlicheBelastungJuni / 0.05) * 30 * 24;}
        if (monatlicheBelastungJuli > 0.05) {heizstundenJuli = 31 * 24;} else {heizstundenJuli = (monatlicheBelastungJuli / 0.05) * 31 * 24;}
        if (monatlicheBelastungAugust > 0.05) {heizstundenAugust = 31 * 24;} else {heizstundenAugust = (monatlicheBelastungAugust / 0.05) * 31 * 24;}
        if (monatlicheBelastungSeptember > 0.05) {heizstundenSeptember = 30 * 24;} else {heizstundenSeptember = (monatlicheBelastungSeptember / 0.05) * 30 * 24;}
        if (monatlicheBelastungOktober > 0.05) {heizstundenOktober = 31 * 24;} else {heizstundenOktober = (monatlicheBelastungOktober / 0.05) * 31 * 24;}
        if (monatlicheBelastungNovember > 0.05) {heizstundenNovember = 30 * 24;} else {heizstundenNovember = (monatlicheBelastungNovember / 0.05) * 30 * 24;}
        if (monatlicheBelastungDezember > 0.05) {heizstundenDezember = 31 * 24;} else {heizstundenDezember = (monatlicheBelastungDezember / 0.05) * 31 * 24;}

  nutzenergieHeizungJanuar = waermeSenken.Januar * faktorBelastungJanuar * heizstundenJanuar / 1000;
  nutzenergieHeizungFebruar = waermeSenken.Februar * faktorBelastungFebruar * heizstundenFebruar / 1000;
  nutzenergieHeizungMärz = waermeSenken.März * faktorBelastungMärz * heizstundenMärz / 1000;
  nutzenergieHeizungApril = waermeSenken.April * faktorBelastungApril * heizstundenApril / 1000;
  nutzenergieHeizungMai = waermeSenken.Mai * faktorBelastungMai * heizstundenMai / 1000;
  nutzenergieHeizungJuni = waermeSenken.Juni * faktorBelastungJuni * heizstundenJuni / 1000;
  nutzenergieHeizungJuli = waermeSenken.Juli * faktorBelastungJuli * heizstundenJuli / 1000;
  nutzenergieHeizungAugust = waermeSenken.August * faktorBelastungAugust * heizstundenAugust / 1000;
  nutzenergieHeizungSeptember = waermeSenken.September * faktorBelastungSeptember * heizstundenSeptember / 1000;
  nutzenergieHeizungOktober = waermeSenken.Oktober * faktorBelastungOktober * heizstundenOktober / 1000;
  nutzenergieHeizungNovember = waermeSenken.November * faktorBelastungNovember * heizstundenNovember / 1000;
  nutzenergieHeizungDezember = waermeSenken.Dezember * faktorBelastungDezember * heizstundenDezember / 1000;

  let gesamtHeizstunden = heizstundenJanuar + heizstundenFebruar + heizstundenMärz + heizstundenApril + heizstundenMai + 
  heizstundenJuni + heizstundenJuli + heizstundenAugust + heizstundenSeptember + heizstundenOktober + heizstundenNovember + heizstundenDezember;

  let gesamtNutzenergieHeizung = nutzenergieHeizungJanuar + nutzenergieHeizungFebruar + nutzenergieHeizungMärz + nutzenergieHeizungApril + 
  nutzenergieHeizungMai + nutzenergieHeizungJuni + nutzenergieHeizungJuli + nutzenergieHeizungAugust + nutzenergieHeizungSeptember + 
  nutzenergieHeizungOktober + nutzenergieHeizungNovember + nutzenergieHeizungDezember;

return {
        nutzenergieHeizungJanuar,
        nutzenergieHeizungFebruar,
        nutzenergieHeizungMärz,
        nutzenergieHeizungApril,
        nutzenergieHeizungMai,
        nutzenergieHeizungJuni,
        nutzenergieHeizungJuli,
        nutzenergieHeizungAugust,
        nutzenergieHeizungSeptember,
        nutzenergieHeizungOktober,
        nutzenergieHeizungNovember,
        nutzenergieHeizungDezember,
        waermeQuellen,
        waermequellensenkenverhaeltnisJanuar,
        waermequellensenkenverhaeltnisFebruar,
        waermequellensenkenverhaeltnisMärz,
        waermequellensenkenverhaeltnisApril,
        waermequellensenkenverhaeltnisMai,
        waermequellensenkenverhaeltnisJuni,
        waermequellensenkenverhaeltnisJuli,
        waermequellensenkenverhaeltnisAugust,
        waermequellensenkenverhaeltnisSeptember,
        waermequellensenkenverhaeltnisOktober,
        waermequellensenkenverhaeltnisNovember,
        waermequellensenkenverhaeltnisDezember,
        ausnutzungsgradJanuar,
        ausnutzungsgradFebruar,
        ausnutzungsgradMärz,
        ausnutzungsgradApril,
        ausnutzungsgradMai,
        ausnutzungsgradJuni,
        ausnutzungsgradJuli,
        ausnutzungsgradAugust,
        ausnutzungsgradSeptember,
        ausnutzungsgradOktober,
        ausnutzungsgradNovember,
        ausnutzungsgradDezember,
        gesamtHeizstunden,
        gesamtNutzenergieHeizung,
        belastungsgrade,
        bilanzInnenTemperaturen,
        waermeSenken,
        faktorBelastungJanuar,
        faktorBelastungFebruar,
        faktorBelastungMärz,
        faktorBelastungApril,
        faktorBelastungMai,
        faktorBelastungJuni,
        faktorBelastungJuli,
        faktorBelastungAugust,
        faktorBelastungSeptember,
        faktorBelastungOktober,
        faktorBelastungNovember,
        faktorBelastungDezember,
        monatlicheBelastungJanuar,
        monatlicheBelastungFebruar,
        monatlicheBelastungMärz,
        monatlicheBelastungApril,
        monatlicheBelastungMai,
        monatlicheBelastungJuni,
        monatlicheBelastungJuli,
        monatlicheBelastungAugust,
        monatlicheBelastungSeptember,
        monatlicheBelastungOktober,
        monatlicheBelastungNovember,
        monatlicheBelastungDezember,
        heizstundenJanuar,
        heizstundenFebruar,
        heizstundenMärz,
        heizstundenApril,
        heizstundenMai,
        heizstundenJuni,
        heizstundenJuli,
        heizstundenAugust,
        heizstundenSeptember,
        heizstundenOktober,
        heizstundenNovember,
        heizstundenDezember,
        maximalerWaermestromGesamt,
        minimaleAussentemperatur,
        innenTemperatur
    
};

}

