#!/usr/bin/env python3
"""
Generator: Herzieningsvoorstel 003.056 Chromium VI — v3.0
JvG Consultancy branding conform MASTER_STYLEGUIDE v1.5 (§1, §8) + SOP_BRIEFING v9.0.
Basis: herzieningsvoorstel_003.056_CrVI_v1.0.md + v3.0-aanvullingen (H13-H15,
prioriteitsmatrix, actieplan, implementation roadmap).

Branding:
- Logo ratio 1.115:1 (754x676 px) — nooit uitrekken
- Cover: kleurlogo 4.0 x 3.59 cm | Header: witlogo 2.0 x 1.79 cm (donkerblauwe balk)
- Kleuren: primair #003366, tekst #1F2937, kaartbg #F8F9FA, randen #E5E7EB
"""
import sys, os
from datetime import datetime

HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
import docx_helpers as H

from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
from docx.oxml import OxmlElement

OUT = "/root/projects/jg/2026-audit-koole-chromium-vi/deliverables/docx/Herzieningsvoorstel_003.056_CrVI_v3.0.docx"
DOC_TITLE = "Herzieningsvoorstel 003.056 Chromium VI"
VERSION = "3.0"
DATUM = "2026-08-25"
AUTHOR = "JvG Consultancy — HSEQ Divisie"

P1C = "EF4444"; P2C = "B45309"; P3C = "3B82F6"; OK = "00A859"


def prio_status(val):
    v = str(val)
    if v.startswith("P1"): return (P1C, True)
    if v.startswith("P2"): return (P2C, True)
    if v.startswith("P3"): return (P3C, True)
    if "Uitgewerkt" in v: return (OK, True)
    if "Conform" in v: return (OK, True)
    return (H.TEXT_DARK, False)


def status_kleur(val):
    if val.startswith("Uitgewerkt"): return (OK, False)
    if val.startswith("Nieuw"): return (P3C, False)
    if val.startswith("Conform"): return (OK, False)
    return (H.TEXT_DARK, False)


def header_footer_v3(doc, title_short, footer_left):
    """Header/footer conform docx_helpers, met v3.0-versieregel."""
    sec = doc.sections[0]
    sec.header_distance = Cm(0.6); sec.footer_distance = Cm(0.6)
    hdr = sec.header
    ht = hdr.add_table(rows=1, cols=2, width=Cm(17.0))
    ht.style = 'Table Grid'; ht.autofit = False
    c0, c1 = ht.rows[0].cells
    c0.width = Cm(13.8); c1.width = Cm(3.2)
    for c in (c0, c1):
        H.shade(c, H.PRIMARY); H.set_cell_margins(c, 80, 140, 80, 140)
    c0.text = ""
    p = c0.paragraphs[0]
    r = p.add_run(title_short); r.bold = True; r.font.size = Pt(10)
    r.font.color.rgb = RGBColor.from_string("FFFFFF"); r.font.name = "Calibri"
    r2 = p.add_run("\nJvG Consultancy — Safety • Governance • Advisory  |  HSEQ Divisie")
    r2.font.size = Pt(8); r2.font.color.rgb = RGBColor.from_string("D1D5DB"); r2.font.name = "Calibri"
    c1.text = ""
    p1 = c1.paragraphs[0]; p1.alignment = WD_ALIGN_PARAGRAPH.RIGHT
    p1.add_run().add_picture(H.LOGO_WHITE, width=Cm(2.0), height=Cm(1.79))
    ftr = sec.footer
    ft = ftr.add_table(rows=1, cols=1, width=Cm(17.0))
    ft.style = 'Table Grid'
    fc = ft.rows[0].cells[0]; H.shade(fc, H.TEXT_SEC); H.set_cell_margins(fc, 60, 140, 60, 140)
    fc.text = ""
    fp = fc.paragraphs[0]; fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
    r = fp.add_run(f"{footer_left}  |  v{VERSION}  |  {DATUM}  |  Pagina ")
    r.font.size = Pt(8.5); r.font.color.rgb = RGBColor.from_string("FFFFFF"); r.font.name = "Calibri"
    H.add_page_field(fp)
    r = fp.add_run("  |  JvG Consultancy")
    r.font.size = Pt(8.5); r.font.color.rgb = RGBColor.from_string("FFFFFF"); r.font.name = "Calibri"


def callout(doc, tekst, kleur="F59E0B", bg="FFFBEB"):
    """Call-out blok: 3px rand + zachte achtergrond (§1.3)."""
    t = doc.add_table(rows=1, cols=1); t.style = 'Table Grid'
    t.alignment = WD_TABLE_ALIGNMENT.CENTER
    c = t.rows[0].cells[0]; H.shade(c, bg); H.set_cell_margins(c, 140, 200, 140, 200)
    c.text = ""
    p = c.paragraphs[0]
    r = p.add_run(tekst); r.font.size = Pt(10); r.font.name = "Calibri"
    r.font.color.rgb = RGBColor.from_string(H.TEXT_DARK)
    tcPr = c._tc.get_or_add_tcPr()
    borders = OxmlElement('w:tcBorders')
    for side in ('top', 'left', 'bottom', 'right'):
        e = OxmlElement(f'w:{side}')
        e.set(qn('w:val'), 'single'); e.set(qn('w:sz'), '18' if side == 'left' else '4')
        e.set(qn('w:color'), kleur)
        borders.append(e)
    tcPr.append(borders)
    doc.add_paragraph().paragraph_format.space_after = Pt(2)


def hiaat_kop(doc, code, titel, prio, status):
    """Hiaat-kopregel met gecodeerde prioriteit + v3.0-status."""
    p = doc.add_paragraph(); p.paragraph_format.space_before = Pt(12); p.paragraph_format.space_after = Pt(3)
    r = p.add_run(f"{code} — {titel}")
    r.bold = True; r.font.size = Pt(12); r.font.name = "Calibri"
    r.font.color.rgb = RGBColor.from_string(H.PRIMARY)
    p2 = doc.add_paragraph(); p2.paragraph_format.space_after = Pt(4)
    r1 = p2.add_run(f"Prioriteit: {prio}   |   Status v3.0: {status}")
    r1.bold = True; r1.font.size = Pt(9.5); r1.font.name = "Calibri"
    r1.font.color.rgb = RGBColor.from_string(OK if "Uitgewerkt" in status else P3C)


if __name__ == "__main__":
    from herzien_content import build_document
    build_document(OUT, DOC_TITLE, VERSION, DATUM, AUTHOR, H,
                   header_footer_v3, callout, hiaat_kop,
                   prio_status, status_kleur)
