#!/usr/bin/env python3
"""Update Werkinstructie Gevaarlijke Stoffen v1.0 → v2.0 (6→20 stoffen)"""

import shutil
from docx import Document
from docx.shared import Pt, Cm, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from copy import deepcopy

SRC = '/root/projects/jg/2026-pgs15-phoenix-metals/deliverables/docx/PGS15_Werkinstructie_GevaarlijkeStoffen_v1.0.docx'
DST = '/root/projects/jg/2026-pgs15-phoenix-metals/deliverables/docx/PGS15_Werkinstructie_GevaarlijkeStoffen_v2.0.docx'
ARCHIVE = '/root/projects/jg/2026-pgs15-phoenix-metals/deliverables/docx/archive_v4/'

# Archive v1.0
shutil.copy2(SRC, ARCHIVE)

doc = Document(SRC)

# === STEP 1: Update version table (TABLE 0) ===
t0 = doc.tables[0]
# Versie 1.0 → 2.0
t0.rows[2].cells[1].text = '2.0'
# Datum
t0.rows[3].cells[1].text = '6 mei 2026'
# Opslag instead of 1 jaar
t0.rows[6].cells[1].text = '1 jaar na publicatiedatum'

# === STEP 2: Update approval table (TABLE 1) ===
t1 = doc.tables[1]
t1.rows[1].cells[2].text = '06-05-2026'

# === STEP 3: Update paragraph texts ===
for p in doc.paragraphs:
    # Update substance count references
    if 'zes geregistreerde gevaarlijke stoffen' in p.text:
        for run in p.runs:
            run.text = run.text.replace('zes geregistreerde gevaarlijke stoffen, waarvan vier vallen onder ADR-klas',
                                         'twintig geregistreerde stoffen (waarvan 8 ADR-geclassificeerd en 12 zonder ADR-classificatie), die gebruikt worden in het Pilot Plant proces van Phoenix Metals IJmuiden. Acht stoffen vallen onder ADR-klas')
    if 'zes stoffen die in het laboratorium worden gebruikt voor metaalverwerking' in p.text:
        for run in p.runs:
            run.text = run.text.replace('zes stoffen die in het laboratorium worden gebruikt voor metaalverwerking',
                                         'twintig stoffen die gebruikt worden in het Pilot Plant proces: 5 input chemicals, 5 intermediaire stoffen en 10 eindproducten')
    # NaOH warning → update to broader warning
    if 'Natriumhydroxide (NaOH) en Zwavelzuur (H₂SO₄) mogen NOOIT' in p.text:
        for run in p.runs:
            run.text = run.text.replace(
                'Natriumhydroxide (NaOH) en Zwavelzuur (H₂SO₄) mogen NOOIT in contact komen met elkaar. De reactie is sterk exotherm.',
                'ZUREN EN BASEN mogen NOOIT in contact komen met elkaar. Reacties zijn sterk exotherm. Natriumaluminaat-oplossing (pH >13) is even bijtend als NaOH en vereist identieke voorzichtigheid.'
            )
    # NaOH description paragraph → broader
    if 'Sodium hydroxide 50% is een sterk basische' in p.text:
        for run in p.runs:
            run.text = run.text.replace(
                'Sodium hydroxide 50% is een sterk basische oplossing die ernstige chemische brandwonden veroorzaakt bij huid- en oogcontact',
                'Natriumaluminaat-oplossing (NaAlO₂, EP-06) en natriumhydroxide zijn sterk basisch (pH >13) en veroorzaken ernstige chemische brandwonden bij huid- en oogcontact'
            )
    # Zwavelzuur paragraph
    if 'Zwavelzuur is aanwezig in drie concentraties' in p.text:
        for run in p.runs:
            run.text = run.text.replace(
                'Zwavelzuur is aanwezig in drie concentraties: 75%, 50% en 25%. De hoogste concentratie (75%) vereist de strengste veilig',
                'Zwavelzuur is aanwezig in concentraties van 25% en 20% HCl. Het vanadium-elektrolyt bevat eveneens zwavelzuur. De hoogste concentratie vereist de strengste veilig'
            )
    # Aluminiumsulfaat paragraph
    if 'Aluminiumsulfaat en calciumoxide zijn vaste stoffen' in p.text:
        for run in p.runs:
            run.text = run.text.replace(
                'Aluminiumsulfaat en calciumoxide zijn vaste stoffen die niet onder ADR vallen, maar wel specifieke gevaren kennen. Alumi',
                'Steelmaking Slag (IC-01), calciumsulfaat/silica, natriumsulfaat, calciumhydroxide, silica, ijzeroxide, mangaandioxide, magnesiumhydroxide en natriumfosfaat zijn vaste stoffen die grotendeels niet onder ADR vallen. Vanadineverbindingen (V₂O₅, NaVO₃, Na₃VO₄) zijn wel gevaarlijk: V₂O₅ is carcinogeen (H350), NaVO₃ is mutageen (H341). Alumi'
            )

# === STEP 4: Update TABLE 2 — Stoffenoverzicht (6 rows → 20 rows) ===
# Define all 20 substances
substances_overview = [
    # (Stof, Gevaar, GHS, PBM-vereisten, Speciale aandacht)
    # INPUT CHEMICALS
    ('Steelmaking Slag\n(poeder, IC-01)', 'Huidirritatie, oogschade,\nstof—H315, H318, H335,\nH372', 'GHS05, GHS07,\nGHS08', 'Stofmasker P2,\nnitril handschoenen,\nveiligheidsbril', 'Bevat SiO₂, CaO, MgO.\nStofvorming bij droge\nhantering. CMR-negatief.'),
    ('Zwavelzuur 25% / 3M\n(H₂SO₄, IC-02)', 'Bijtend—H290, H314,\nH318', 'GHS05', 'Zuur-bestendige\nhandschoenen,\ngezichtsscherm', 'ADR 8 / UN 2796 /\nPG II. pH <1. Verdunnen\naltich langzaam.'),
    ('Waterstofperoxide 30%\n(H₂O₂, IC-03)', 'Oxiderend, bijtend—\nH302, H318, H332', 'GHS05, GHS07', 'Nitril handschoenen,\ngezichtsscherm, labjas', 'ADR 5.1(8) / UN 2014 /\nPG II. Niet mengen met\nbrandbare stoffen.'),
    ('Natriumpersulfaat\n(Na₂S₂O₈, IC-04)', 'Oxiderend, irriterend,\nsensibiliserend—H272,\nH302, H315, H317,\nH319, H334, H335', 'GHS03, GHS07,\nGHS08', 'Stofmasker P2,\nnitril handschoenen,\nveiligheidsbril', 'ADR 5.1 / UN 1505 /\nPG III. Respiratoire\nsensibilisator (H334).'),
    ('Zoutzuur 20%\n(HCl, IC-05)', 'Bijtend, irriterend—\nH290, H315, H319,\nH335', 'GHS05, GHS07', 'Zuur-bestendige\nhandschoenen,\ngezichtsscherm', 'ADR 8 / UN 1789 /\nPG II. Dampen irriteren\nademhalingswegen.'),
    # INTERMEDIATES
    ('Calciumsulfaat/silica\n(CaSO₄/SiO₂, IM-01)', 'Geen H-codes\n(ongeclassificeerd)', 'Geen', 'Standaard PBM\n(volstaat)', 'Mengsel. Individuele\ncomponenten niet\ngevaarlijk.'),
    ('Natriumsulfaat\n(Na₂SO₄·10H₂O, IM-02)', 'Geen H-codes\n(ongeclassificeerd)', 'Geen', 'Standaard PBM\n(volstaat)', 'Niet ADR-gereguleerd.\nHygroscopisch.'),
    ('Trinatriumorthovanadaat\n(Na₃VO₄, IM-03)', 'Irriterend—H302,\nH312, H315, H319,\nH332', 'GHS07', 'Nitril handschoenen,\nveiligheidsbril, labjas', 'Niet ADR-gereguleerd.\nVanadiumverbinding—\nvoorkom inademing.'),
    ('Natriummetavanadaat\n(NaVO₃, IM-04)', 'Giftig, mutageen,\ncarcinogeen verdenking—\nH301, H319, H332,\nH341, H361fd, H372,\nH411', 'GHS06, GHS08,\nGHS09', 'Chemisch bestendige\nhandschoenen,\ngezichtsscherm,\nstofmasker P3', 'ADR 6.1 / UN 3285 /\nPG III. H341 (Muta. 2)\ntoegevoegd per Merck\nSDS. Milieugevaarlijk.'),
    # END PRODUCTS
    ('Calciumhydroxide\n(Ca(OH)₂, EP-01)', 'Irriterend, oogschade—\nH315, H318, H335', 'GHS05, GHS07', 'Nitril handschoenen,\nveiligheidsbril,\nstofmasker P2', 'Niet ADR-gereguleerd.\nReageert exotherm met\nwater.'),
    ('Silica, neergeslagen\n(amorf, EP-02)', 'Geen H-codes\n(ongeclassificeerd)', 'Geen', 'Stofmasker P2 bij\nstofvorming', 'Amorfe silica.\nNiet kristallijn.\nNiet ADR-gereguleerd.'),
    ('IJzeroxide\n(Fe₂O₃, EP-03)', 'Geen H-codes\n(ongeclassificeerd)', 'Geen', 'Standaard PBM\n(volstaat)', 'Niet ADR-gereguleerd.\nStofvorming mogelijk.'),
    ('Mangaan(IV)oxide\n(MnO₂, EP-04)', 'Schadelijk—H302,\nH332, H373', 'GHS07, GHS08', 'Nitril handschoenen,\nveiligheidsbril,\nstofmasker P2', 'Niet ADR-gereguleerd.\nLange-termijn schade\norganen (H373).'),
    ('Magnesiumhydroxide\n(Mg(OH)₂, EP-05)', 'Geen H-codes\n(ongeclassificeerd)', 'Geen', 'Standaard PBM\n(volstaat)', 'Niet ADR-gereguleerd.\nZwak basisch.'),
    ('Natriumaluminaat\noplossing (NaAlO₂,\nEP-06)', 'Bijtend—H290, H314,\nH318', 'GHS05', 'Zuur-bestendige\nhandschoenen,\ngezichtsscherm,\nzuur-bestendig schort', 'ADR 8 / UN 1819 /\nPG II ⚠️ (List zegt PG III,\nSDS bevestigt PG II).\nH290 toegevoegd. pH >13.'),
    ('Natriumfosfaat\n(Na₃PO₄, EP-07)', 'Irriterend—H315,\nH319, H335', 'GHS07', 'Nitril handschoenen,\nveiligheidsbril', 'Niet ADR-gereguleerd.\nWaarschuwingssignaal.'),
    ('Vanadiumpentoxide\n(V₂O₅, EP-08)', 'Giftig, carcinogeen,\nmutageen—H301, H318,\nH330, H335, H341,\nH350, H361fd, H362,\nH372, H411', 'GHS05, GHS06,\nGHS08, GHS09', 'Volledige bescherming:\nP3 masker, chemisch\nbestendige handschoenen,\ngezichtsscherm, schort', 'ADR 6.1 / UN 2862 /\nPG III. CARCEROGEEN\n(H350, Carc. 1B).\nStrengste maatregelen\nvereist. H411 milieu.'),
    ('Vanadiumelektrolyt\n(H₂SO₄/VOSO₄/V₂(SO₄)₃,\nEP-09)', 'Bijtend, giftig,\nreproductief giftig—\nH290, H302, H314,\nH318, H335, H361,\nH370, H372, H401,\nH411', 'GHS05, GHS07,\nGHS08, GHS09', 'Volledige bescherming:\ngezichtsscherm, zuur-\nbestendig schort, P3\nmasker bij spatgevaar', 'ADR 8 / UN 2796 /\nPG II. H411 toegevoegd\nper SDS. Multi-\ncomponent mengsel.\nRepr. 2 (H361).'),
]

t2 = doc.tables[2]
# Remove old data rows (keep header row 0)
while len(t2.rows) > 1:
    tr = t2.rows[-1]._tr
    tr.getparent().remove(tr)

# Add new rows
for subst in substances_overview:
    row = t2.add_row()
    for i, val in enumerate(subst):
        cell = row.cells[i]
        cell.text = ''
        p = cell.paragraphs[0]
        run = p.add_run(val)
        run.font.size = Pt(8)
        run.font.name = 'Calibri'

# === STEP 5: Update TABLE 3 — PBM per stof (6→20) ===
pbm_data = [
    ('Steelmaking Slag', 'Nitril handschoenen', 'Veiligheidsbril', 'Labjas (standaard)', 'Stofmasker P2\nbij stofvorming'),
    ('H₂SO₄ 25%', 'Zuur-bestendige\nhandschoenen (EN 374)', 'Gezichtsscherm\n(EN 166)', 'Labjas (standaard)', 'Niet vereist\n(vloeistof)'),
    ('H₂O₂ 30%', 'Nitril handschoenen\n(EN 374)', 'Gezichtsscherm\n(EN 166)', 'Labjas (standaard)', 'Niet vereist'),
    ('Na₂S₂O₈', 'Nitril handschoenen', 'Veiligheidsbril', 'Labjas (standaard)', 'Stofmasker P2\nbij stofvorming'),
    ('HCl 20%', 'Zuur-bestendige\nhandschoenen', 'Gezichtsscherm\n(EN 166)', 'Labjas (standaard)', 'Niet vereist'),
    ('CaSO₄/SiO₂', 'Standaard', 'Standaard', 'Standaard', 'Niet vereist'),
    ('Na₂SO₄', 'Standaard', 'Standaard', 'Standaard', 'Niet vereist'),
    ('Na₃VO₄', 'Nitril handschoenen', 'Veiligheidsbril', 'Labjas', 'Niet vereist'),
    ('NaVO₃', 'Chemisch bestendig\n(EN 374 type A)', 'Gezichtsscherm\n(EN 166)', 'Zuur-bestendig schort', 'Stofmasker P3\n(altijd)'),
    ('Ca(OH)₂', 'Nitril handschoenen', 'Veiligheidsbril', 'Labjas (standaard)', 'Stofmasker P2\nbij stofvorming'),
    ('Silica (amorf)', 'Standaard', 'Standaard', 'Standaard', 'Stofmasker P2\nbij stofvorming'),
    ('Fe₂O₃', 'Standaard', 'Standaard', 'Standaard', 'Niet vereist'),
    ('MnO₂', 'Nitril handschoenen', 'Veiligheidsbril', 'Labjas (standaard)', 'Stofmasker P2'),
    ('Mg(OH)₂', 'Standaard', 'Standaard', 'Standaard', 'Niet vereist'),
    ('NaAlO₂ oplossing', 'Zuur-bestendige\nhandschoenen', 'Gezichtsscherm\n(EN 166)', 'Zuur-bestendig schort\nover labjas', 'Niet vereist\n(vloeistof)'),
    ('Na₃PO₄', 'Nitril handschoenen', 'Veiligheidsbril', 'Labjas (standaard)', 'Niet vereist'),
    ('V₂O₅', 'Chemisch bestendig\n(EN 374 type A)', 'Gezichtsscherm\n(EN 166)', 'Zuur-bestendig schort', 'P3 masker\n(altijd verplicht)'),
    ('Vanadiumelektrolyt', 'Chemisch bestendig\n(EN 374 type A)', 'Gezichtsscherm\n(EN 166)', 'Zuur-bestendig schort', 'P3 masker bij\nspatgevaar'),
]

t3 = doc.tables[3]
while len(t3.rows) > 1:
    tr = t3.rows[-1]._tr
    tr.getparent().remove(tr)

for subst in pbm_data:
    row = t3.add_row()
    for i, val in enumerate(subst):
        cell = row.cells[i]
        cell.text = ''
        p = cell.paragraphs[0]
        run = p.add_run(val)
        run.font.size = Pt(8)
        run.font.name = 'Calibri'

# === STEP 6: Update specific morsprocedure references ===
for p in doc.paragraphs:
    if 'NaOH-morsing' in p.text or 'NaOH 50%' in p.text:
        continue  # Keep existing NaOH procedures as reference
    # Update NaOH reference in §6.3 title
    # We'll add a note about NaAlO₂ being equally hazardous

# === STEP 7: Save ===
doc.save(DST)
print(f'✅ Saved: {DST}')
print(f'✅ Archived v1.0 to: {ARCHIVE}')
