#!/usr/bin/env python3
"""Batch fix E3: add footer (+ logo for 03/04) to 8 docs, bump version to v1.1."""

import copy, re
from pathlib import Path
from docx import Document
from docx.shared import Cm, Pt, Emu
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml

SRC = Path("/root/projects/jg/2026-PM-VBS-Element3/deliverables/docx")
LOGO = Path("/root/projects/jg/assets/branding/jvg-logo-white-medium.png")

FOOTER_TEXT = "JvG Consultancy | Safety • Governance • Advisory | © 2026"
FONT_NAME = "Calibri"
FONT_SIZE = Pt(9)
FONT_COLOR = "666666"

DOCS = [
    ("PM_VBS03_01_Control_of_Work_v1.0.docx", False),
    ("PM_VBS03_03_Gevaarlijke_Stoffen_v1.0.docx", True),
    ("PM_VBS03_04_Werken_op_Hoogte_v1.0.docx", True),
    ("PM_VBS03_05_Onderhoud_v1.0.docx", False),
    ("PM_VBS03_07_Formulierenpakket_v1.0.docx", False),
    ("PM_VBS03_08_PSSR_v1.0.docx", False),
    ("PM_VBS03_09_Operationele_Inspectie_v1.0.docx", False),
    ("PM_VBS03_10_KPI_Matrix_v1.0.docx", False),
]


def set_run_font(run, name, size, color_hex):
    run.font.name = name
    run.font.size = size
    rPr = run._element.get_or_add_rPr()
    # Set color
    color_el = parse_xml(f'<w:color {nsdecls("w")} w:val="{color_hex}"/>')
    existing = rPr.find(qn('w:color'))
    if existing is not None:
        rPr.remove(existing)
    rPr.append(color_el)


def add_footer(doc):
    """Add footer to ALL sections."""
    for section in doc.sections:
        footer = section.footer
        footer.is_linked_to_previous = False
        # Clear existing
        for p in footer.paragraphs:
            footer._element.remove(p._element)
        p = footer.add_paragraph()
        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
        run = p.add_run(FOOTER_TEXT)
        set_run_font(run, FONT_NAME, FONT_SIZE, FONT_COLOR)


def add_logo_to_header(doc):
    """Add logo to first section header (for docs 03+04)."""
    section = doc.sections[0]
    header = section.header
    header.is_linked_to_previous = False
    # Prepend logo paragraph
    p = header.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.LEFT
    run = p.add_run()
    run.add_picture(str(LOGO), width=Cm(2.0), height=Cm(1.8))
    # Move to top of header
    header._element.insert(0, p._element)


def bump_version_in_body(doc):
    """Find v1.0 in paragraphs/tables and replace with v1.1."""
    for p in doc.paragraphs:
        if "v1.0" in p.text:
            for run in p.runs:
                run.text = run.text.replace("v1.0", "v1.1")
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                for p in cell.paragraphs:
                    if "v1.0" in p.text:
                        for run in p.runs:
                            run.text = run.text.replace("v1.0", "v1.1")


def main():
    for fname, needs_logo in DOCS:
        src = SRC / fname
        if not src.exists():
            print(f"SKIP (not found): {fname}")
            continue

        doc = Document(str(src))
        add_footer(doc)
        if needs_logo:
            add_logo_to_header(doc)
        bump_version_in_body(doc)

        out_name = fname.replace("_v1.0", "_v1.1")
        out_path = SRC / out_name
        doc.save(str(out_path))
        print(f"OK: {out_name}" + (" (+logo)" if needs_logo else ""))

    print("\nDone.")


if __name__ == "__main__":
    main()
