#!/usr/bin/env python3
"""
Simple Markdown to DOCX Converter for HSEQ v3.0 Deliverables
- JvG Consultancy branding
- Proper metadata
- Clean formatting
"""

from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from datetime import datetime
import sys

def add_heading(doc, text, level=1):
    """Add heading with JvG style"""
    heading = doc.add_heading(text, level=level)
    heading.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
    return heading

def add_paragraph(doc, text, bold=False):
    """Add paragraph"""
    para = doc.add_paragraph(text)
    para.runs[0].bold = bold
    return para

def markdown_to_docx(md_path, output_path, title, author="JvG Consultancy"):
    """Convert markdown to DOCX"""

    # Create document
    doc = Document()

    # Add title page
    doc.add_heading(title, level=0)
    doc.add_paragraph(f"Auteur: {author}")
    doc.add_paragraph(f"Datum: {datetime.now().strftime('%Y-%m-%d')}")
    doc.add_paragraph(f"Versie: 3.0")
    doc.add_paragraph("_")  # Divider

    # Read markdown
    with open(md_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()

    # Parse markdown
    in_table = False
    table_headers = []
    table_rows = []

    for line in lines:
        line = line.rstrip('\n')

        # Skip empty lines
        if not line.strip():
            doc.add_paragraph()
            continue

        # Headers
        if line.startswith('# '):
            add_heading(doc, line[2:], level=1)
        elif line.startswith('## '):
            add_heading(doc, line[3:], level=2)
        elif line.startswith('### '):
            add_heading(doc, line[4:], level=3)
        elif line.startswith('#### '):
            add_heading(doc, line[5:], level=4)

        # Tables (Markdown style)
        elif line.startswith('|'):
            parts = [p.strip() for p in line.split('|')[1:-1]]

            if not in_table:
                # Start of table
                table_headers = parts
                in_table = True
                table_rows = []
            elif '-' in ''.join(parts):
                # Table separator - skip
                continue
            else:
                # Table row
                table_rows.append(parts)
        elif in_table:
            # End of table
            if table_rows:
                table = doc.add_table(rows=len(table_rows)+1, cols=len(table_headers))
                table.style = 'Light Grid Accent 1'

                # Header row
                for i, header in enumerate(table_headers):
                    cell = table.rows[0].cells[i]
                    cell.text = header
                    for run in cell.runs:
                        run.font.bold = True

                # Data rows
                for i, row in enumerate(table_rows):
                    for j, cell_text in enumerate(row):
                        table.rows[i+1].cells[j].text = cell_text

            in_table = False
            table_rows = []

        # Lists
        elif line.startswith('- '):
            para = doc.add_paragraph(line[2:], style='List Bullet')
        elif line.startswith('* '):
            para = doc.add_paragraph(line[2:], style='List Bullet')
        elif line[0].isdigit() and line[1] == '.':
            para = doc.add_paragraph(line[3:], style='List Number')

        # Bold/Italic
        elif '**' in line:
            para = doc.add_paragraph()
            parts = line.split('**')
            for i, part in enumerate(parts):
                run = para.add_run(part)
                if i % 2 == 1:  # Odd parts are bold
                    run.bold = True
        elif '*' in line:
            para = doc.add_paragraph()
            parts = line.split('*')
            for i, part in enumerate(parts):
                run = para.add_run(part)
                if i % 2 == 1:  # Odd parts are italic
                    run.italic = True

        # Regular paragraph
        else:
            add_paragraph(doc, line)

    # Handle final table if file ends mid-table
    if in_table and table_rows:
        table = doc.add_table(rows=len(table_rows)+1, cols=len(table_headers))
        table.style = 'Light Grid Accent 1'

        for i, header in enumerate(table_headers):
            cell = table.rows[0].cells[i]
            cell.text = header
            for run in cell.runs:
                run.font.bold = True

        for i, row in enumerate(table_rows):
            for j, cell_text in enumerate(row):
                table.rows[i+1].cells[j].text = cell_text

    # Set metadata
    core_props = doc.core_properties
    core_props.title = title
    core_props.author = author
    core_props.created = datetime.now()
    core_props.version = "3.0"

    # Save
    doc.save(output_path)
    print(f"✅ Created: {output_path}")
    return True

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Usage: python md_to_docx.py <input.md> <output.docx> <Title>")
        sys.exit(1)

    md_path = sys.argv[1]
    output_path = sys.argv[2]
    title = sys.argv[3]

    try:
        markdown_to_docx(md_path, output_path, title)
    except Exception as e:
        print(f"❌ Error: {e}")
        sys.exit(1)