"""
Unified Footer-Builder für alle Autismus-Stiftung-DOCX-Templates.
Synchron mit Brief-Footer (4 Spalten: Stiftungssitz | Vorstand | Register | Bank+Web).
"""
from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
from docx.enum.text import WD_ALIGN_PARAGRAPH

# Daten — SINGLE SOURCE OF TRUTH
STIFTUNG = {
    'name': 'Autismus-Stiftung',
    'street': 'Kölnische Str. 43',
    'plz_ort': '34117 Kassel',
    'tel': '+49 561 8279 55 66',
    'email': 'hallo[at]autismusstiftung[punkt]de',
    'web': 'www.autismusstiftung.de',
    'rechtsform': 'Stiftung bürgerlichen Rechts',
    'status': 'gemeinnützig und mildtätig',
    'register': 'Stiftungsregister 25 d 04/11',
    'sitz': 'Sitz Kassel',
    'aufsicht': 'Aufsicht RP Kassel',
    'vorstand': [
        'Johannes Schatt (Vors.)',
        'Horst Wischek (stv. Vors.)',
        'Rüdiger Zahn',
        'Dr. Detlef Kienle',
        'Gerd Lotz',
        'Karl Ewald',
        'Nelma Matos Rua',
    ],
    'bank_name': 'Evangelische Bank',
    'iban': 'IBAN: DE37 5206 0410 0000 1005 10',
    'bic': 'BIC: GENODEF1EK1',
}

INK = RGBColor(0x1A, 0x1A, 0x1A)
GRAY = RGBColor(0x7C, 0x7C, 0x7C)
MAGENTA = RGBColor(0xD9, 0x2D, 0x68)

def _set_cell_border_top(cell, color='D92D68', size='4'):
    tcPr = cell._tc.get_or_add_tcPr()
    tcBorders = OxmlElement('w:tcBorders')
    for border in ['top']:
        b = OxmlElement(f'w:{border}')
        b.set(qn('w:val'), 'single')
        b.set(qn('w:sz'), size)
        b.set(qn('w:color'), color)
        tcBorders.append(b)
    tcPr.append(tcBorders)

def _set_para_no_spacing(p):
    pf = p.paragraph_format
    pf.space_before = Pt(0)
    pf.space_after = Pt(2)
    pf.line_spacing = 1.2

def _add_text(p, text, size=8, bold=False, color=None, eyebrow=False):
    r = p.add_run(text)
    r.font.name = 'Roboto'
    r.font.size = Pt(size)
    r.bold = bold
    if eyebrow:
        r.font.size = Pt(7)
        r.bold = True
        r.font.color.rgb = MAGENTA
        r.font.all_caps = True
    elif color is not None:
        r.font.color.rgb = color

def build_footer(doc):
    """Insert unified 4-column footer in the section's footer."""
    section = doc.sections[0]
    footer = section.footer
    
    # Clear any existing content (paragraphs AND tables)
    for child in list(footer._element):
        # child is one of: <w:p> (paragraph) or <w:tbl> (table)
        footer._element.remove(child)
    
    # Magenta separator line ABOVE table (achieved via top border on table cells)
    # Add a 4-col table
    table = footer.add_table(rows=1, cols=4, width=Cm(17.0))
    table.autofit = False
    # Set column widths
    widths = [Cm(4.5), Cm(4.5), Cm(4.0), Cm(4.0)]
    for i, w in enumerate(widths):
        for cell in table.columns[i].cells:
            cell.width = w
    
    cells = table.rows[0].cells
    
    # ===== COL 1: STIFTUNGSSITZ + KONTAKT =====
    c1 = cells[0]
    _set_cell_border_top(c1)
    p = c1.paragraphs[0]
    _set_para_no_spacing(p)
    _add_text(p, 'STIFTUNGSSITZ', eyebrow=True)
    
    for line in [STIFTUNG['name'], STIFTUNG['street'], STIFTUNG['plz_ort']]:
        p = c1.add_paragraph(); _set_para_no_spacing(p)
        _add_text(p, line, color=INK)
    # Empty spacer
    p = c1.add_paragraph(); _set_para_no_spacing(p)
    _add_text(p, ' ', color=INK)
    p = c1.add_paragraph(); _set_para_no_spacing(p)
    _add_text(p, f'Tel.: {STIFTUNG["tel"]}', color=INK)
    p = c1.add_paragraph(); _set_para_no_spacing(p)
    _add_text(p, STIFTUNG['email'], color=INK)
    p = c1.add_paragraph(); _set_para_no_spacing(p)
    _add_text(p, STIFTUNG['web'], color=INK)
    
    # ===== COL 2: VORSTAND =====
    c2 = cells[1]
    _set_cell_border_top(c2)
    p = c2.paragraphs[0]
    _set_para_no_spacing(p)
    _add_text(p, 'VORSTAND', eyebrow=True)
    for name in STIFTUNG['vorstand']:
        p = c2.add_paragraph(); _set_para_no_spacing(p)
        _add_text(p, name, color=INK)
    
    # ===== COL 3: REGISTER + STATUS =====
    c3 = cells[2]
    _set_cell_border_top(c3)
    p = c3.paragraphs[0]
    _set_para_no_spacing(p)
    _add_text(p, 'REGISTER', eyebrow=True)
    for line in [STIFTUNG['rechtsform'], STIFTUNG['status'], STIFTUNG['register'], STIFTUNG['sitz'], STIFTUNG['aufsicht']]:
        p = c3.add_paragraph(); _set_para_no_spacing(p)
        _add_text(p, line, color=INK)
    
    # ===== COL 4: BANK & SPENDENKONTO =====
    c4 = cells[3]
    _set_cell_border_top(c4)
    p = c4.paragraphs[0]
    _set_para_no_spacing(p)
    _add_text(p, 'SPENDENKONTO', eyebrow=True)
    p = c4.add_paragraph(); _set_para_no_spacing(p)
    _add_text(p, STIFTUNG['bank_name'], color=INK)
    p = c4.add_paragraph(); _set_para_no_spacing(p)
    _add_text(p, STIFTUNG['iban'], color=INK)
    p = c4.add_paragraph(); _set_para_no_spacing(p)
    _add_text(p, STIFTUNG['bic'], color=INK)

if __name__ == '__main__':
    print('Footer-Builder loaded. Use build_footer(doc) to apply.')
