# lca.py - een eenvoudige levenscyclusanalyse (rekenwaarden, geen metingen)
import math

NET = 0.15        # kg CO2-eq per kWh uit het Belgische net (rekenwaarde)
JAREN = 15        # functionele eenheid: 15 jaar in de kweekruimte

# kg CO2-eq per kg filament (van grondstof tot rol), dichtheid (g/cm³), levensduur in de kweekruimte (jaar),
# kg CO2 bij verbranden (PLA: de koolstof komt uit de maïsplant, die telt hier niet mee)
FILAMENT = {"PLA": (5.76, 1.24, 3, 0.0), "PETG": (5.85, 1.27, 15, 2.3), "ASA": (6.5, 1.07, 15, 2.9)}


def onderdeel(volume_cm3, printuren, materiaal, printer_kw=0.10):
    """kg CO2-eq per fase voor een geprint onderdeel dat JAREN lang moet meegaan."""
    factor, rho, levensduur, verbranden = FILAMENT[materiaal]
    stuks = math.ceil(JAREN / levensduur)             # hoeveel keer je het moet maken
    massa = volume_cm3 * rho / 1000                   # kg per stuk
    return {"stuks": stuks,
            "materiaal": stuks * massa * factor,
            "printen": stuks * printuren * printer_kw * NET,
            "einde": stuks * massa * verbranden}


def batterij(kwh, per_kwh, cycli, rendement, massa, nacht_kwh=1.3):
    """Batterij die elke nacht nacht_kwh levert: productie van alle pakketten en het verlies bij laden en ontladen."""
    pakketten = math.ceil(JAREN * 365 / cycli)       # één cyclus per dag
    verlies = nacht_kwh * (1 / rendement - 1) * 365 * JAREN        # kWh die extra opgewekt moet worden
    return {"pakketten": pakketten, "productie": pakketten * kwh * per_kwh,
            "verlies": verlies * NET, "massa": pakketten * massa}


print("regelkast RK-1 (105,9 cm³, 9,8 h printen), 15 jaar:")
for naam in FILAMENT:
    r = onderdeel(105.9, 9.8, naam)
    totaal = r["materiaal"] + r["printen"] + r["einde"]
    print(f"  {naam:5} {r['stuks']} keer: materiaal {r['materiaal']:.2f} + printen {r['printen']:.2f}"
          f" + einde {r['einde']:.2f} = {totaal:.2f} kg CO2-eq")

print("batterij, 1,3 kWh per nacht, 15 jaar:")
lfp = batterij(3.07, 100, 3000, 0.95, 28)
lood = batterij(4.8, 80, 500, 0.80, 138)
for naam, r in (("LiFePO4", lfp), ("lood-zuur", lood)):
    print(f"  {naam:9} {r['pakketten']:2d} pakketten ({r['massa']:4d} kg): productie {r['productie']:5.0f}"
          f" + verlies {r['verlies']:3.0f} = {r['productie'] + r['verlies']:5.0f} kg CO2-eq")
