#!/usr/bin/env python3
"""
Script para generar el documento .docx con portada profesional
para la actividad de Semana 4 - Fundamentos para IA

Autor: Alexander Oviedo Fadul
Fecha: Febrero 2026

Uso:
    python3 generar_docx_portada.py
    
Requisitos:
    pip install python-docx
"""

from docx import Document
from docx.shared import Inches, Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import os

def crear_portada():
    """Crea el documento Word con la portada profesional."""
    
    # Crear documento
    doc = Document()
    
    # Configurar margenes
    sections = doc.sections
    for section in sections:
        section.top_margin = Cm(2.5)
        section.bottom_margin = Cm(2.5)
        section.left_margin = Cm(3)
        section.right_margin = Cm(3)
    
    # Agregar espacios iniciales para centrar verticalmente
    for _ in range(4):
        doc.add_paragraph()
    
    # === TITULO PRINCIPAL ===
    titulo = doc.add_paragraph()
    titulo.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = titulo.add_run("USO DE LIBRERÍAS PYTHON PARA IA")
    run.bold = True
    run.font.size = Pt(24)
    run.font.name = 'Arial'
    
    # Subtitulo
    subtitulo = doc.add_paragraph()
    subtitulo.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = subtitulo.add_run("Script de Aplicación de Librerías para Ciencia de Datos")
    run.font.size = Pt(14)
    run.font.name = 'Arial'
    
    # Espacio
    doc.add_paragraph()
    doc.add_paragraph()
    
    # === INFORMACION DEL CURSO ===
    info_curso = doc.add_paragraph()
    info_curso.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = info_curso.add_run("Fundamentos para IA")
    run.bold = True
    run.font.size = Pt(16)
    run.font.name = 'Arial'
    
    nrc = doc.add_paragraph()
    nrc.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = nrc.add_run("NRC-197")
    run.font.size = Pt(14)
    run.font.name = 'Arial'
    
    semana = doc.add_paragraph()
    semana.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = semana.add_run("Semana 4")
    run.font.size = Pt(14)
    run.font.name = 'Arial'
    
    # Espacio
    for _ in range(3):
        doc.add_paragraph()
    
    # === AUTOR ===
    presentado = doc.add_paragraph()
    presentado.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = presentado.add_run("Presentado por:")
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    autor = doc.add_paragraph()
    autor.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = autor.add_run("Alexander Oviedo Fadul")
    run.bold = True
    run.font.size = Pt(14)
    run.font.name = 'Arial'
    
    # Espacio
    for _ in range(2):
        doc.add_paragraph()
    
    # === DOCENTE ===
    dirigido = doc.add_paragraph()
    dirigido.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = dirigido.add_run("Docente:")
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    docente = doc.add_paragraph()
    docente.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = docente.add_run("Ing. Rodolfo Muriel")
    run.font.size = Pt(14)
    run.font.name = 'Arial'
    
    # Espacio
    for _ in range(3):
        doc.add_paragraph()
    
    # === UNIVERSIDAD ===
    universidad = doc.add_paragraph()
    universidad.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = universidad.add_run("CORPORACIÓN UNIVERSITARIA MINUTO DE DIOS")
    run.bold = True
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    programa = doc.add_paragraph()
    programa.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = programa.add_run("Ingeniería de Sistemas")
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    fecha = doc.add_paragraph()
    fecha.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = fecha.add_run("Febrero 2026")
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    # === NUEVA PAGINA - ENLACE COLAB ===
    doc.add_page_break()
    
    # Titulo de la seccion
    enlace_titulo = doc.add_paragraph()
    enlace_titulo.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = enlace_titulo.add_run("ENLACE AL NOTEBOOK EN GOOGLE COLAB")
    run.bold = True
    run.font.size = Pt(16)
    run.font.name = 'Arial'
    
    doc.add_paragraph()
    doc.add_paragraph()
    
    # Instrucciones
    instruccion = doc.add_paragraph()
    instruccion.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
    run = instruccion.add_run(
        "El script completo de esta actividad se encuentra disponible en Google Colab. "
        "Para acceder al notebook con el código fuente, comentarios explicativos y "
        "visualizaciones, utilice el siguiente enlace:"
    )
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    doc.add_paragraph()
    
    # Cuadro para el enlace
    enlace_box = doc.add_paragraph()
    enlace_box.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = enlace_box.add_run("[INSERTAR ENLACE DE GOOGLE COLAB AQUÍ]")
    run.bold = True
    run.font.size = Pt(14)
    run.font.name = 'Courier New'
    
    doc.add_paragraph()
    
    # Nota sobre el enlace
    nota = doc.add_paragraph()
    nota.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
    run = nota.add_run(
        "Nota: Una vez subido el archivo .ipynb a Google Colab, reemplace el texto "
        "entre corchetes por el enlace compartido del notebook. Asegúrese de configurar "
        "los permisos de compartición para que cualquier persona con el enlace pueda "
        "acceder al documento."
    )
    run.font.size = Pt(11)
    run.font.name = 'Arial'
    run.italic = True
    
    doc.add_paragraph()
    doc.add_paragraph()
    
    # Contenido del notebook
    contenido_titulo = doc.add_paragraph()
    run = contenido_titulo.add_run("Contenido del Notebook:")
    run.bold = True
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    contenidos = [
        "Portada e información del estudiante",
        "Preguntas orientadoras respondidas",
        "Configuración del entorno e importación de librerías",
        "Carga y exploración del dataset Diabetes",
        "Exploración de datos con Polars (estadísticas, filtrado, comparativa)",
        "Análisis estadístico con NumPy y SciPy",
        "Visualización de datos con Matplotlib",
        "Visualización avanzada con Seaborn",
        "Conclusiones reflexivas",
        "Referencias bibliográficas en formato APA"
    ]
    
    for contenido in contenidos:
        p = doc.add_paragraph(contenido, style='List Bullet')
        for run in p.runs:
            run.font.size = Pt(11)
            run.font.name = 'Arial'
    
    doc.add_paragraph()
    doc.add_paragraph()
    
    # Librerías utilizadas
    librerias_titulo = doc.add_paragraph()
    run = librerias_titulo.add_run("Librerías de Python utilizadas:")
    run.bold = True
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    librerias = [
        "NumPy - Cálculo numérico y operaciones con arrays",
        "SciPy - Estadística avanzada y tests de hipótesis",
        "Pandas - Manipulación y análisis de datos tabulares",
        "Polars - Alternativa moderna y eficiente a Pandas",
        "Matplotlib - Visualización de datos básica",
        "Seaborn - Visualización estadística avanzada"
    ]
    
    for libreria in librerias:
        p = doc.add_paragraph(libreria, style='List Bullet')
        for run in p.runs:
            run.font.size = Pt(11)
            run.font.name = 'Arial'
    
    # Guardar documento
    ruta_salida = os.path.join(
        os.path.dirname(os.path.abspath(__file__)),
        "Oviedo_Alexander_Script.docx"
    )
    doc.save(ruta_salida)
    print(f"Documento generado exitosamente: {ruta_salida}")
    return ruta_salida


if __name__ == "__main__":
    # Verificar si python-docx está instalado
    try:
        from docx import Document
    except ImportError:
        print("Instalando python-docx...")
        import subprocess
        subprocess.check_call(['pip', 'install', 'python-docx', '-q'])
        from docx import Document
    
    crear_portada()
