#!/usr/bin/env python3
"""
Script para generar el documento Word de la actividad FIA S2
"""

from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE

# Crear documento
doc = Document()

# Configurar estilos
style = doc.styles['Normal']
font = style.font
font.name = 'Arial'
font.size = Pt(11)

# ===== PORTADA =====
doc.add_paragraph()
doc.add_paragraph()

titulo = doc.add_paragraph()
run = titulo.add_run("CORPORACIÓN UNIVERSITARIA MINUTO DE DIOS")
run.bold = True
run.font.size = Pt(14)
titulo.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.add_paragraph()

subtitulo = doc.add_paragraph()
run = subtitulo.add_run("Especialización en Inteligencia Artificial")
run.font.size = Pt(12)
subtitulo.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.add_paragraph()
doc.add_paragraph()

titulo_act = doc.add_paragraph()
run = titulo_act.add_run("SCRIPT: UTILIZACIÓN DE DATOS DE UN DATA SET")
run.bold = True
run.font.size = Pt(16)
titulo_act.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.add_paragraph()

curso = doc.add_paragraph()
run = curso.add_run("NRC-197 Fundamentos para IA")
run.font.size = Pt(12)
curso.alignment = WD_ALIGN_PARAGRAPH.CENTER

semana = doc.add_paragraph()
run = semana.add_run("Semana 2")
run.font.size = Pt(12)
semana.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.add_paragraph()
doc.add_paragraph()

# Integrantes
integrantes_titulo = doc.add_paragraph()
run = integrantes_titulo.add_run("EQUIPO DE TRABAJO 10")
run.bold = True
run.font.size = Pt(12)
integrantes_titulo.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.add_paragraph()

integrantes = [
    "Alexander Oviedo Fadul",
    "William David Obando López",
    "Josmar Peña Buitrago",
    "María Fernanda Ruiz Paipilla",
    "Neheman Samir Jaller Cerchiaro"
]

for nombre in integrantes:
    p = doc.add_paragraph()
    run = p.add_run(nombre)
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER

doc.add_paragraph()
doc.add_paragraph()

docente = doc.add_paragraph()
run = docente.add_run("Docente: Dr. Breyner Alexander Parra Rojas")
run.font.size = Pt(11)
docente.alignment = WD_ALIGN_PARAGRAPH.CENTER

fecha = doc.add_paragraph()
run = fecha.add_run("Enero de 2026")
fecha.alignment = WD_ALIGN_PARAGRAPH.CENTER

# Nueva página
doc.add_page_break()

# ===== INTRODUCCIÓN =====
doc.add_heading('1. INTRODUCCIÓN', level=1)

intro = doc.add_paragraph()
intro.add_run(
    "Este documento presenta el desarrollo del script solicitado para la actividad de la Semana 2 "
    "del curso Fundamentos para IA. El objetivo es demostrar la aplicación de Python y la librería "
    "Pandas para el análisis de datos, enfocándose en operaciones básicas de Ciencia de Datos."
)

doc.add_paragraph()

objetivos = doc.add_paragraph()
objetivos.add_run("Objetivos del script:").bold = True

obj_list = [
    "Cargar un dataset desde una URL externa",
    "Explorar la estructura y características de los datos",
    "Calcular medidas de tendencia central (media, mediana, moda)",
    "Calcular medidas de dispersión (máximo, mínimo, desviación estándar)",
    "Realizar análisis comparativos por grupos"
]

for obj in obj_list:
    doc.add_paragraph(obj, style='List Bullet')

doc.add_paragraph()

dataset = doc.add_paragraph()
dataset.add_run("Dataset utilizado: ").bold = True
dataset.add_run("Diabetes Dataset - Datos de 442 pacientes con diabetes para análisis estadístico. ")
dataset.add_run("Fuente: https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html")

# ===== DESARROLLO =====
doc.add_heading('2. DESARROLLO DEL SCRIPT', level=1)

desarrollo = doc.add_paragraph()
desarrollo.add_run(
    "El script completo se encuentra en el archivo Jupyter Notebook adjunto "
    "(FIA_Semana2_Script_Equipo10.ipynb). A continuación se presenta un resumen "
    "de las principales secciones:"
)

doc.add_paragraph()

# Secciones
secciones = [
    ("Celda 1 - Importación de librerías", 
     "Se importan Pandas y NumPy, las librerías fundamentales para análisis de datos en Python."),
    ("Celda 2 - Carga del dataset", 
     "Se utiliza pd.read_csv() para cargar los datos directamente desde la URL proporcionada."),
    ("Celda 3 - Exploración inicial", 
     "Se visualizan las primeras filas con head() para entender la estructura de los datos."),
    ("Celda 4 - Información general", 
     "Se utiliza info() y describe() para obtener un resumen estadístico completo."),
    ("Celda 5 - Medidas de tendencia central", 
     "Se calculan media, mediana y moda para las variables AGE y BMI."),
    ("Celda 6 - Medidas de dispersión", 
     "Se calculan máximo, mínimo, rango, desviación estándar y varianza."),
    ("Celda 7 - Análisis por grupos", 
     "Se utiliza groupby() para comparar estadísticas entre hombres y mujeres."),
    ("Celda 8 - Tabla resumen", 
     "Se consolidan todas las estadísticas en una tabla para fácil referencia.")
]

for titulo, desc in secciones:
    p = doc.add_paragraph()
    p.add_run(f"• {titulo}: ").bold = True
    p.add_run(desc)

# ===== RESULTADOS =====
doc.add_heading('3. RESULTADOS PRINCIPALES', level=1)

resultados = doc.add_paragraph()
resultados.add_run("Los principales hallazgos del análisis son:")

doc.add_paragraph()

# Tabla de resultados
table = doc.add_table(rows=5, cols=3)
table.style = 'Table Grid'

# Encabezados
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Estadística'
hdr_cells[1].text = 'Edad (AGE)'
hdr_cells[2].text = 'BMI'

# Datos
data = [
    ('Media', '~48.5 años', '~26.4'),
    ('Mediana', '~50 años', '~25.7'),
    ('Máximo', '79 años', '42.2'),
    ('Mínimo', '19 años', '18.0')
]

for i, (stat, age, bmi) in enumerate(data, 1):
    row = table.rows[i].cells
    row[0].text = stat
    row[1].text = age
    row[2].text = bmi

# Formatear encabezados en negrita
for cell in table.rows[0].cells:
    for paragraph in cell.paragraphs:
        for run in paragraph.runs:
            run.bold = True

# ===== CONCLUSIONES =====
doc.add_heading('4. CONCLUSIONES', level=1)

conclusiones = [
    "La edad promedio de los pacientes con diabetes en el dataset es de aproximadamente 48-49 años, "
    "lo que sugiere que esta condición afecta principalmente a la población de mediana edad.",
    
    "El Índice de Masa Corporal (BMI) promedio supera el umbral de 25 establecido por la OMS para "
    "clasificar sobrepeso, evidenciando la correlación entre obesidad y diabetes.",
    
    "Python y sus librerías (Pandas, NumPy) permiten realizar análisis estadísticos complejos con "
    "pocas líneas de código, facilitando la extracción de información útil de los datos.",
    
    "El análisis de datos es fundamental para la toma de decisiones en salud, permitiendo identificar "
    "grupos de riesgo y diseñar programas de prevención personalizados.",
    
    "Este ejercicio demuestra la importancia de la Ciencia de Datos como disciplina que transforma "
    "datos crudos en información valiosa para las organizaciones."
]

for i, concl in enumerate(conclusiones, 1):
    p = doc.add_paragraph()
    p.add_run(f"{i}. ").bold = True
    p.add_run(concl)

# ===== REFERENCIAS =====
doc.add_heading('5. REFERENCIAS', level=1)

referencias = [
    "Boschetti, A. y Massaron, L. (2018). Python Data Science Essentials: A Practitioner's Guide "
    "Covering Essential Data Science Principles, Tools, and Techniques (pp. 64-135). Packt Publishing.",
    
    "So, A., Joseph, T. V., John, R. T., Worsley, A. y Asare, S. (2020). The data science workshop: "
    "A new, interactive approach to learning data science (pp. 16-36). Packt Publishing.",
    
    "Mert, U., y Cuhadaroglu, M. (2018). Mastering numerical computing with NumPy: Master scientific "
    "computing and perform complex operations with ease (pp. 55-87). Packt Publishing.",
    
    "Dataset de Diabetes. NC State University. Recuperado de: "
    "https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html",
    
    "Documentación oficial de Pandas. https://pandas.pydata.org/docs/"
]

for ref in referencias:
    p = doc.add_paragraph(ref)
    p.paragraph_format.left_indent = Inches(0.5)
    p.paragraph_format.first_line_indent = Inches(-0.5)

# Guardar documento
output_path = "OviedoFadul_Alexander_Script_Equipo10.docx"
doc.save(output_path)
print(f"✅ Documento guardado en: {output_path}")
