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

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
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("TALLER: APRENDIZAJE NO SUPERVISADO")
    run.bold = True
    run.font.size = Pt(22)
    run.font.name = 'Arial'
    
    # Subtitulo
    subtitulo = doc.add_paragraph()
    subtitulo.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = subtitulo.add_run("Aplicacion de Clustering con K-Means")
    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("Machine Learning")
    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-200")
    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("Rodolfo Antonio Muriel Rodriguez")
    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("CORPORACION 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("Ingenieria 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 taller completo de aprendizaje no supervisado se encuentra disponible en "
        "Google Colab. Para acceder al notebook con el codigo 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 AQUI]")
    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. Asegurese de configurar "
        "los permisos de comparticion 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 Taller:")
    run.bold = True
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    contenidos = [
        "Portada e informacion del estudiante",
        "Preguntas orientadoras sobre aprendizaje no supervisado",
        "Configuracion del entorno e importacion de librerias",
        "Carga y exploracion del dataset Adult Census Income",
        "Preparacion de datos para clustering (estandarizacion)",
        "Determinacion del numero optimo de clusters (Metodo del Codo, Silueta)",
        "Entrenamiento del modelo K-Means",
        "Visualizacion de resultados con PCA",
        "Interpretacion de los clusters identificados",
        "Conclusiones reflexivas",
        "Referencias bibliograficas 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()
    
    # Tecnicas utilizadas
    tecnicas_titulo = doc.add_paragraph()
    run = tecnicas_titulo.add_run("Tecnicas de Machine Learning aplicadas:")
    run.bold = True
    run.font.size = Pt(12)
    run.font.name = 'Arial'
    
    tecnicas = [
        "K-Means Clustering - Segmentacion de datos",
        "Estandarizacion - Normalizacion de variables",
        "PCA - Reduccion de dimensionalidad",
        "Metodo del Codo - Seleccion de K optimo",
        "Coeficiente de Silueta - Evaluacion de calidad"
    ]
    
    for tecnica in tecnicas:
        p = doc.add_paragraph(tecnica, 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_Taller.docx"
    )
    doc.save(ruta_salida)
    print(f"Documento generado exitosamente: {ruta_salida}")
    return ruta_salida


if __name__ == "__main__":
    # Verificar si python-docx esta 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()
