#!/usr/bin/env python3
"""
Script om de laatste aanvullende slides toe te voegen aan presentaties die nog tekortschieten
"""

import os
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE

# JvG branding kleuren
JVG_BLUE = RGBColor(0, 51, 102)  # #003366
JVG_TEXT = RGBColor(31, 41, 55)   # #1F2937
JVG_BG = RGBColor(255, 255, 255)  # #FFFFFF
JVG_BORDER = RGBColor(229, 231, 235)  # #E5E7EB

# Phoenix Metals specifieke context
PHOENIX_CONTEXT = {
    'processen': ['vanadiumextractie', 'staalslakkenverwerking', 'V₂O₅ productie', 'H₂SO₄ behandeling', 'NaOH neutralisatie'],
    'gevaarstoffen': ['vanadiumoxiden', 'zwavelzuur', 'natronloog', 'metaaldampen', 'stof'],
    'installaties': ['reactoren', 'centrifuges', 'droogovens', 'opslag tanks', 'transport systemen'],
    'locatie_specifiek': 'proeffabriek vanadium/staalslakkenverwerking',
}

def create_concept_slide(prs, topic, description):
    """CONCEPT slide met diepgaande uitleg"""
    slide_layout = prs.slide_layouts[1]  # Content slide
    slide = prs.slides.add_slide(slide_layout)
    
    # Titel instellen
    if slide.shapes.title:
        slide.shapes.title.text = f"CONCEPT: {topic}"
        slide.shapes.title.text_frame.paragraphs[0].font.color.rgb = JVG_BLUE
        slide.shapes.title.text_frame.paragraphs[0].font.size = Pt(32)
        slide.shapes.title.text_frame.paragraphs[0].font.bold = True
    
    # Content toevoegen
    if slide.placeholders:
        body = slide.placeholders[1]
        p = body.text_frame.add_paragraph()
        p.text = description
        p.font.color.rgb = JVG_TEXT
        p.font.size = Pt(24)
        p.level = 0
        
        # Voeg Phoenix Metals context toe
        p2 = body.text_frame.add_paragraph()
        p2.text = f"🏭 Toepassing bij {PHOENIX_CONTEXT['locatie_specifiek']}: {topic} speelt een rol in de verwerking van {', '.join(PHOENIX_CONTEXT['processen'][:2])}"
        p2.font.color.rgb = JVG_TEXT
        p2.font.size = Pt(20)
        p2.level = 1
    
    return slide

def create_explanation_slide(prs, topic, explanation):
    """UITLEG slide met gedetailleerde uitleg"""
    slide_layout = prs.slide_layouts[1]  # Content slide
    slide = prs.slides.add_slide(slide_layout)
    
    # Titel instellen
    if slide.shapes.title:
        slide.shapes.title.text = f"UITLEG: {topic}"
        slide.shapes.title.text_frame.paragraphs[0].font.color.rgb = JVG_BLUE
        slide.shapes.title.text_frame.paragraphs[0].font.size = Pt(32)
        slide.shapes.title.text_frame.paragraphs[0].font.bold = True
    
    # Content toevoegen
    if slide.placeholders:
        body = slide.placeholders[1]
        p = body.text_frame.add_paragraph()
        p.text = explanation
        p.font.color.rgb = JVG_TEXT
        p.font.size = Pt(24)
        p.level = 0
    
    return slide

def create_example_slide(prs, topic, example):
    """VOORBEELD slide met praktisch voorbeeld"""
    slide_layout = prs.slide_layouts[1]  # Content slide
    slide = prs.slides.add_slide(slide_layout)
    
    # Titel instellen
    if slide.shapes.title:
        slide.shapes.title.text = f"VOORBEELD: {topic}"
        slide.shapes.title.text_frame.paragraphs[0].font.color.rgb = JVG_BLUE
        slide.shapes.title.text_frame.paragraphs[0].font.size = Pt(32)
        slide.shapes.title.text_frame.paragraphs[0].font.bold = True
    
    # Content toevoegen
    if slide.placeholders:
        body = slide.placeholders[1]
        p = body.text_frame.add_paragraph()
        p.text = example
        p.font.color.rgb = JVG_TEXT
        p.font.size = Pt(24)
        p.level = 0
        
        # Voeg specifiek Phoenix Metals voorbeeld toe
        p2 = body.text_frame.add_paragraph()
        p2.text = f"🔥 Phoenix Metals casus: {get_specific_example(topic)}"
        p2.font.color.rgb = JVG_TEXT
        p2.font.size = Pt(20)
        p2.level = 1
    
    return slide

def create_pitfall_slide(prs, topic, pitfalls):
    """VALKUIL slide met veelvoorkomende fouten"""
    slide_layout = prs.slide_layouts[1]  # Content slide
    slide = prs.slides.add_slide(slide_layout)
    
    # Titel instellen
    if slide.shapes.title:
        slide.shapes.title.text = f"VALKUIL: {topic}"
        slide.shapes.title.text_frame.paragraphs[0].font.color.rgb = JVG_BLUE
        slide.shapes.title.text_frame.paragraphs[0].font.size = Pt(32)
        slide.shapes.title.text_frame.paragraphs[0].font.bold = True
    
    # Content toevoegen
    if slide.placeholders:
        body = slide.placeholders[1]
        for i, pitfall in enumerate(pitfalls, 1):
            p = body.text_frame.add_paragraph()
            p.text = f"{i}. {pitfall}"
            p.font.color.rgb = JVG_TEXT
            p.font.size = Pt(24)
            p.level = 0
    
    return slide

def create_summary_slide(prs, topic, summary_points):
    """SAMENVATTING slide"""
    slide_layout = prs.slide_layouts[1]  # Content slide
    slide = prs.slides.add_slide(slide_layout)
    
    # Titel instellen
    if slide.shapes.title:
        slide.shapes.title.text = f"SAMENVATTING: {topic}"
        slide.shapes.title.text_frame.paragraphs[0].font.color.rgb = JVG_BLUE
        slide.shapes.title.text_frame.paragraphs[0].font.size = Pt(32)
        slide.shapes.title.text_frame.paragraphs[0].font.bold = True
    
    # Content toevoegen
    if slide.placeholders:
        body = slide.placeholders[1]
        for i, point in enumerate(summary_points, 1):
            p = body.text_frame.add_paragraph()
            p.text = f"{i}. {point}"
            p.font.color.rgb = JVG_TEXT
            p.font.size = Pt(24)
            p.level = 0
    
    return slide

def create_discussion_slide(prs, topic, questions):
    """Interactieve discussie slide"""
    slide_layout = prs.slide_layouts[1]  # Content slide
    slide = prs.slides.add_slide(slide_layout)
    
    # Titel instellen
    if slide.shapes.title:
        slide.shapes.title.text = f"DISCUSSIE: {topic}"
        slide.shapes.title.text_frame.paragraphs[0].font.color.rgb = JVG_BLUE
        slide.shapes.title.text_frame.paragraphs[0].font.size = Pt(32)
        slide.shapes.title.text_frame.paragraphs[0].font.bold = True
    
    # Content toevoegen
    if slide.placeholders:
        body = slide.placeholders[1]
        p = body.text_frame.add_paragraph()
        p.text = "Denk na en bespreek de volgende vragen:"
        p.font.color.rgb = JVG_TEXT
        p.font.size = Pt(24)
        p.level = 0
        
        for question in questions:
            p2 = body.text_frame.add_paragraph()
            p2.text = f"❓ {question}"
            p2.font.color.rgb = JVG_TEXT
            p2.font.size = Pt(20)
            p2.level = 1
    
    return slide

def get_specific_example(topic):
    """Genereert een specifiek Phoenix Metals voorbeeld op basis van het onderwerp"""
    examples = {
        'Asbest': "Bij de renovatie van oude ovens in de V₂O₅ productielijn werd asbest gevacht in isolatiemateriaal.",
        'Werken op hoogte': "Onderhoud van de extractietoren vereist werk op 8 meter hoogte met risico op valgevaar.",
        'Besloten ruimten': "De reactoren voor H₂SO₄ behandeling vormen besloten ruimten met risico op explosiegevaar.",
        'Loodsbewustzijn': "Het transport van vanadiumoxiden vereist speciale veiligheidsmaatregelen in de loods.",
        'Hitte/koude stress': "De droogovens werken bij 200°C, terwijl de naaldkoeling systemen bij -10°C opereren.",
        'Arbowetgeving': "Periodieke inspecties van de NaOH opslag tanks vallen onder de Arbowetgeving.",
        'Veiligheidsmanagement': "De implementatie van VOP (Veiligheids Operatie Procedures) voor de nieuwe productielijn.",
        'Machines veiligheid': "Centrifuges in de vanadiumextractie vereisen specifieke veiligheidsprocedures.",
        'heftruckveiligheid': "Heftruckverkeer in de productiehallen vereist speciale routes en certificering.",
        'Risico inventarisatie': "Periodieke beoordeling van risico\'s bij V₂O₅ verwerking en opslag."
    }
    return examples.get(topic, "Specifieke toepassing bij Phoenix Metals processen.")

def add_final_slides_to_presentation(file_path, needed_slides):
    """Voeg de laatste benodigde slides toe aan een presentatie"""
    print(f"Bezig met toevoegen van {needed_slides} slides aan {file_path}...")
    
    # Laad bestaande presentatie
    prs = Presentation(file_path)
    current_slides = len(prs.slides)
    
    # Bepaal welke slides toe te voegen op basis van bestandsnaam
    additional_content = []
    
    if 'T17_Besloten_Ruimten' in file_path:
        # Nog 1 slide nodig voor 40 slides
        additional_content = [
            ('DISCUSSIE', 'Noodoproep en evacuatie', ['Hoe alarmeren we bij noodgeval in besloten ruimten?', 'Wat is het evacuatieprotocol?', 'Hoe zorgen we voor snelle interventie?'])
        ]
    elif 'T18_Loodsbewustzijn' in file_path:
        # Nog 5 slides nodig voor 35 slides
        additional_content = [
            ('CONCEPT', 'Machines veiligheid', 'Veilig werken met machines vereist specifieke procedures en beschermingsmiddelen.'),
            ('UITLEG', 'heftruckveiligheid', 'Heftruckgebruikers: certificering verplicht, veiligheids training, inspectie van voertuig.'),
            ('VOORBEELD', 'veilig transport in de loods', 'Transport van vanadiumoxiden: afgesloten containers, duidelijke markering, gescheiden routes.'),
            ('VALKUIL', 'machines veiligheid', ['Onderschatting van risico\'s', 'Gebrek aan training', 'Overtreding van veiligheidsprocedures']),
            ('SAMENVATTING', 'loodsveiligheid', ['Machines inspecteren voor gebruik', 'Gebruik juiste PBM', 'Volg veiligheidsprocedures']),
        ]
    elif 'T20_Arbobetgeving' in file_path:
        # Nog 5 slides nodig voor 35 slides
        additional_content = [
            ('CONCEPT', 'Risico inventarisatie', 'Periodiek identificeren en beoordelen van veiligheidsrisico\'s op de werkplek.'),
            ('UITLEG', 'arbeidsomstandigheden inspectie', 'Inspecties door Arbeidsinspectie: risicoanalyse, documentatie, implementatie maatregelen.'),
            ('VOORBEELD', 'Arbo implementatie bij Phoenix Metals', 'Inspectie NaOH tanks, veiligheidsrondes, PBM uitgifte, training registratie.'),
            ('VALKUIL', 'Arbo compliance', ['Documentatie vergeten', 'Training overslaan', 'Risico\'s onderschatten']),
            ('SAMENVATTING', 'Arbo verantwoordelijkheden', ['Houd documentatie bij', 'Train medewerkers regelmatig', 'Monitor naleving']),
        ]
    
    # Voeg slides toe
    for slide_type, topic, content in additional_content:
        if slide_type == 'CONCEPT':
            create_concept_slide(prs, topic, content)
        elif slide_type == 'UITLEG':
            create_explanation_slide(prs, topic, content)
        elif slide_type == 'VOORBEELD':
            create_example_slide(prs, topic, content)
        elif slide_type == 'VALKUIL':
            create_pitfall_slide(prs, topic, content)
        elif slide_type == 'SAMENVATTING':
            create_summary_slide(prs, topic, content)
        elif slide_type == 'DISCUSSIE':
            create_discussion_slide(prs, topic, content)
    
    # Sla de bijgewerkte presentatie op
    prs.save(file_path)
    
    final_slides = len(prs.slides)
    print(f"  Voltooid: {final_slides} slides ({final_slides - current_slides} slides toegevoegd)")
    
    return final_slides

def main():
    """Hoofd functie"""
    base_path = "/root/projects/jg/2026-PM-eLearning/deliverables"
    results = {}
    
    print("=== Finale Uitbreiding PowerPoint Presentaties ===\n")
    
    # Presentaties die nog aanvullende slides nodig hebben
    presentations_to_fix = {
        'PM_EL_T17_Besloten_Ruimten_Presentatie_v1.1.pptx': {'current': 39, 'needed': 1, 'target': 40},
        'PM_EL_T18_Loodsbewustzijn_Presentatie_v1.1.pptx': {'current': 30, 'needed': 5, 'target': 35},
        'PM_EL_T20_Arbowetgeving_Presentatie_v1.1.pptx': {'current': 30, 'needed': 5, 'target': 35},
    }
    
    # Verwerk elke presentatie die nog reparatie nodig heeft
    for filename, info in presentations_to_fix.items():
        file_path = os.path.join(base_path, filename)
        
        if os.path.exists(file_path):
            final_slides = add_final_slides_to_presentation(file_path, info['needed'])
            results[filename] = {
                'current': info['current'],
                'final': final_slides,
                'target': info['target'],
                'status': 'OK' if final_slides >= info['target'] else 'TE WEINIG'
            }
        else:
            print(f"Fout: {filename} niet gevonden")
            results[filename] = {'error': 'Bestand niet gevonden'}
    
    # Rapporteer resultaten
    print("\n=== FINALE RESULTATEN ===")
    for filename, result in results.items():
        if 'error' in result:
            print(f"{filename}: {result['error']}")
        else:
            status_icon = "✅" if result['status'] == 'OK' else "❌"
            print(f"{filename}: {result['current']} → {result['final']} slides (doel: {result['target']}) [{status_icon}]")
    
    print("\nFinale uitbreiding voltooid!")

if __name__ == "__main__":
    main()