#!/usr/bin/env python3
"""Genera Agenda DOCX + HTML Dashboard para Bruna Peru Weekly Review — 13 julio 2026"""

import sys
sys.path.insert(0, '/home/node/.hermes/venv/lib/python3.13/site-packages')

from docx import Document
from docx.shared import Pt, RGBColor, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
import datetime, os

FECHA = "13 de julio, 2026"
FECHA_FILE = "2026-07-13"
OUTPUT_DIR = "/home/node/workspace/bruna-peru/outputs"
os.makedirs(OUTPUT_DIR, exist_ok=True)

# ─── Colores ──────────────────────────────────────────────────────────
NAVY   = RGBColor(0x1B, 0x4F, 0x72)
ACCENT = RGBColor(0x2E, 0x86, 0xC1)
RED    = RGBColor(0xC0, 0x39, 0x2B)
ORANGE = RGBColor(0xE6, 0x7E, 0x22)
GREEN  = RGBColor(0x27, 0xAE, 0x60)
PURPLE = RGBColor(0x8E, 0x44, 0xAD)
YELLOW = RGBColor(0xF1, 0xC4, 0x0F)
GRAY   = RGBColor(0x95, 0xA5, 0xA6)
DARK   = RGBColor(0x2C, 0x3E, 0x50)

STATUS_COLORS = {
    "HECHO": GREEN,
    "AVANZADO": YELLOW,
    "NO AVANZADO": RED,
    "VERIFICAR": ORANGE,
    "NUEVO": PURPLE,
}

def add_heading(doc, text, level=1, color=NAVY):
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(12 if level == 1 else 8)
    p.paragraph_format.space_after = Pt(4)
    run = p.add_run(text)
    run.bold = True
    run.font.size = Pt(18 if level == 1 else 13 if level == 2 else 11)
    run.font.color.rgb = color
    return p

def add_status_item(doc, text, status, responsible="", indent_in=0.3):
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(indent_in)
    p.paragraph_format.space_before = Pt(2)
    p.paragraph_format.space_after = Pt(2)
    badge = p.add_run(f"[{status}] ")
    badge.bold = True
    badge.font.color.rgb = STATUS_COLORS.get(status, DARK)
    badge.font.size = Pt(10)
    main = p.add_run(text)
    main.font.size = Pt(10)
    if responsible:
        rr = p.add_run(f"  \u2192 {responsible}")
        rr.font.color.rgb = ACCENT
        rr.font.size = Pt(9)
    return p

def add_divider(doc):
    p = doc.add_paragraph("\u2500" * 80)
    p.paragraph_format.space_before = Pt(4)
    p.paragraph_format.space_after = Pt(4)
    p.runs[0].font.color.rgb = ACCENT
    p.runs[0].font.size = Pt(7)

def add_bullet(doc, text):
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(0.4)
    p.paragraph_format.space_before = Pt(2)
    p.paragraph_format.space_after = Pt(2)
    run = p.add_run(f"\u2022 {text}")
    run.font.size = Pt(10)
    return p

# ─── Datos actualizados 13 julio 2026 ─────────────────────────────────
# INTELIGENCIA SEMANA 07 – 13 JUL 2026:
# • Read.AI (10 jul): Reunion Bruna Brain — M1 listo para produccion con trigger lunes 7am
#   Andres debe unirse al canal de pruebas y ejecutar M1 HOY (semana siguiente)
#   Apollo/HubSpot integrados; estandarizacion de procesos avanzando con Edwin Viales
#   MCP conectado a Vittrex — dashboard en nube listo para presentar a Don Jorge
# • Read.AI (23 jun): Reunion Oral Care — planta Lurin operativa; muestras en lab sin usar
#   Diego Gomez debio enviar req a planeamiento — VERIFICAR si se hizo 
# • Google Alerts TiO2: ilmenite, Lomon, Kronos, Tronox, ti-pure activos toda la semana
# • Andres: viajes confirmados esta semana — Lima (Jul 19), Santiago/Temuco (Jul 21), Buenos Aires
# • Sin emails directos de: Daryza, Aurora, Romex, Cafetal, Mineria, Universal Colors en inbox

pendientes = {
    "Victor Alfaro": {
        "rol": "Gerente General Lima",
        "items": [
            ("Oscar Rosas (Mineria) — confirmar status reunion + propuesta MIBC/xantatos cerrada?", "VERIFICAR"),
            ("Cold visits Qroma (Baldion) — neopreno, caucho clorado, parafina: update semanal", "VERIFICAR"),
            ("Prospectos pintura (Anipsa, Perupaint, Soprint, Interpaint) — cold visits: reportar esta semana", "VERIFICAR"),
            ("Plasticos (Tigre, Andinaplast, Nicoll) — cera PE, TiO2: status cotizaciones", "VERIFICAR"),
            ("Alimentos (Pursuit, JAVA, Creafoods) — pipeline acidos y especialidades: update", "VERIFICAR"),
        ]
    },
    "Jennifer Segura": {
        "rol": "Lider Mercado Peru",
        "items": [
            ("Cotizacion formal Daryza (lista 30+ MPs de Urbina recibida 11 mar) — OVERDUE 18 SEMANAS", "NO AVANZADO"),
            ("Reunion con Jose Urbina (Daryza) — agendar y ejecutar esta semana sin excepcion", "NO AVANZADO"),
            ("Aurora Paint — resinas epoxicas VYTA BPA: confirmar respuesta o re-cotizar", "VERIFICAR"),
            ("Universal Colors — TiO2 588 y oxidos hierro (Murillo/Erika): Google Alerts TiO2 activos", "VERIFICAR"),
            ("Profinne — seguimiento MPs especiales: status cotizacion", "VERIFICAR"),
        ]
    },
    "Andres Bruna": {
        "rol": "Director Nuevos Mercados",
        "items": [
            ("Bruna Brain M1 — unirse canal de pruebas y ejecutar pruebas HOY (accion pendiente desde 10 jul)", "NUEVO"),
            ("Revisar y aprobar lista productos, prospectos y clientes para M1 — correcciones necesarias", "NUEVO"),
            ("Oral Care — confirmar proximos pasos: formula Ruby, tubos, equipos", "VERIFICAR"),
            ("Grupo Romero — Rafa Villa, Pedro Clay, Estefania Loza: reagendar reunion", "VERIFICAR"),
            ("Alimentos — Pursuit, JAVA, Creafoods: acidos y especialidades pipeline", "VERIFICAR"),
            ("NOTA: Viajes confirmados — Lima (19 jul), Santiago/Temuco (21 jul), Buenos Aires. Coordinar cobertura equipo.", "VERIFICAR"),
        ]
    },
    "Jorge Bruna": {
        "rol": "Empaques / Oral Care",
        "items": [
            ("Oral Care — verificar si Diego Gomez envio req formal a planeamiento de Lurin", "VERIFICAR"),
            ("Coordinar asistencia presencial prueba impresion + armado tubos en Lurin", "VERIFICAR"),
            ("Confirmar: tratamiento Corona disponible + energia superficial muestras antes de imprimir", "VERIFICAR"),
            ("Romex/Nico — update tapas y liners: status produccion semanal", "VERIFICAR"),
        ]
    },
    "Carlos Artavia": {
        "rol": "Logistica / SPU",
        "items": [
            ("Cafetal K2CO3 — pago impuestos + liberacion carga con Ileana: RESOLVER ESTA SEMANA", "NO AVANZADO"),
            ("CargoFlex: coordinar 6,600 kg restantes + proxima entrega", "VERIFICAR"),
            ("PO Norway — inventario status (OVERDUE 12 sem) — escalar si no hay respuesta", "VERIFICAR"),
        ]
    },
    "Vanessa Garcia": {
        "rol": "BDU / Soporte Comercial",
        "items": [
            ("Org chart actualizado cliente principal pintura + costos reales policloropreno", "VERIFICAR"),
            ("Subida factura al sistema — confirmar con receptora", "VERIFICAR"),
        ]
    },
    "Mildred": {
        "rol": "Admin",
        "items": [
            ("Portal Evis — pagos y facturacion pendientes", "VERIFICAR"),
        ]
    },
    "Lourdes Arley": {
        "rol": "Finanzas",
        "items": [
            ("Confirmacion pago impuestos / fondeos VCB S.A.C.", "VERIFICAR"),
            ("Capacitacion calculo costo financiero con Jennifer — verificar completado", "AVANZADO"),
        ]
    },
}

cuentas = [
    ("Grupo Romero — Pintura / Polimeros", "VERIFICAR", [
        ("Lufarol, CaCO3, 12 productos aprobados — status muestras y pipeline activo", "Jennifer Segura", "P1"),
        ("Org chart actualizado + costos reales policloropreno", "Vanessa Garcia", "P2"),
        ("Rafa Villa, Pedro Clay, Estefania Loza — reagendar reunion (Andres de viaje 19-26 jul)", "Andres Bruna", "P2"),
    ]),
    ("Cafetal (K2CO3 grado oral)", "NO AVANZADO", [
        ("CargoFlex: coordinar 6,600 kg restantes + proxima entrega", "Carlos Artavia", "P1"),
        ("Confirmar pago impuestos + liberacion carga (Ileana) — BLOQUEADO", "Carlos Artavia", "P1"),
        ("Postentrega — satisfaccion cliente", "Victor Alfaro", "P2"),
    ]),
    ("Romex / Nico", "VERIFICAR", [
        ("Liners y tapas — status produccion y control calidad", "Jorge Bruna", "P1"),
        ("Chat liners: confirmar en reunion estado actual", "Jorge Bruna", "P2"),
    ]),
    ("Daryza", "NO AVANZADO", [
        ("Lista 30+ MPs recibida (11 mar) — cotizacion formal OVERDUE 18 SEMANAS", "Jennifer Segura", "P1"),
        ("MPs prioritarias: Lauril Eter Sulfato 82t, Ac. Sulfonico 58t, NaOH 50% 46t, PEAD 38t", "", "P1"),
        ("Reunion con Jose Urbina — ejecutar esta semana sin excepcion", "Jennifer Segura", "P1"),
    ]),
    ("Aurora Paint", "VERIFICAR", [
        ("Resinas epoxicas VYTA BPA — status cotizacion: confirmar interes o re-iniciar", "Jennifer Segura", "P1"),
        ("Seguimiento activo requerido — sin emails esta semana", "Jennifer Segura", "P2"),
    ]),
    ("Universal Colors", "VERIFICAR", [
        ("TiO2 588 y oxidos de hierro — Google Alerts activos: ilmenite, Lomon, Kronos, Tronox, ti-pure", "Jennifer Segura", "P2"),
        ("Murillo/Erika — status cotizacion y muestras pendientes", "Jennifer Segura", "P2"),
    ]),
    ("Qroma", "VERIFICAR", [
        ("Carlos Baldion — neopreno, caucho clorado, parafina: visita pendiente esta semana", "Victor Alfaro", "P2"),
        ("Profinne — seguimiento MPs especiales", "Jennifer Segura", "P2"),
    ]),
    ("Prospectos Pintura", "VERIFICAR", [
        ("Anipsa, Perupaint, Soprint, Interpaint — cold visits: reportar esta semana", "Victor Alfaro", "P3"),
        ("Preparar lista contactos y materiales de presentacion", "Victor Alfaro", "P3"),
    ]),
    ("Plasticos", "VERIFICAR", [
        ("Tigre, Andinaplast, Inproplast, Nicoll — cera PE, TiO2, masterbatch", "Victor Alfaro", "P3"),
        ("Lufarol / CaCO3 para plasticos — oferta lista?", "Jennifer Segura", "P3"),
    ]),
    ("Mineria", "VERIFICAR", [
        ("Oscar Rosas — confirmar reunion realizada + propuesta MIBC y xantatos cerrada", "Victor Alfaro", "P1"),
        ("Ficha tecnica + pricing MIBC, xantatos, lubricantes — lista?", "Andres Bruna", "P2"),
        ("Oscar J (referido mineria) — coordinar visita", "Victor Alfaro", "P1"),
    ]),
    ("Oral Care", "AVANZADO", [
        ("Planta Lurin operativa CONFIRMADO (reunion 23 jun) — muestras en lab sin usar", "Andres Bruna", "P1"),
        ("VERIFICAR: Diego Gomez envio req formal a planeamiento — 3 semanas sin confirmar", "Jorge Bruna", "P1"),
        ("Prueba impresion + armado tubos en Lurin — coordinar presencia equipo Bruna", "Jorge Bruna", "P1"),
        ("Formula Ruby, tubos, equipos — cerrar status completo esta semana", "Andres Bruna", "P2"),
    ]),
    ("Alimentos", "VERIFICAR", [
        ("Pursuit, JAVA, Creafoods — acidos y especialidades: pipeline status semanal", "Victor Alfaro", "P2"),
        ("Coordinar reunion seguimiento con Andres (coordinar antes de viajes 19+ jul)", "Andres Bruna", "P2"),
    ]),
]

urgentes = [
    "Daryza: Cotizacion OVERDUE 18 semanas — Jenny DEBE agendar y reunirse con Urbina esta semana (limite absoluto)",
    "Bruna Brain M1: Andres debe unirse al canal de pruebas y ejecutar M1 HOY — pendiente desde reunion 10 jul",
    "Oral Care Lurin: VERIFICAR si Diego Gomez envio req formal a planeamiento (3 semanas sin confirmar)",
    "Cafetal: Liberacion carga bloqueada por impuestos — Carlos debe resolver con Ileana esta semana",
    "Cafetal: PO Norway OVERDUE 12 semanas — escalar a Andres si Carlos no resuelve",
    "Andres viajes: Lima (19 jul), Santiago/Temuco (21 jul), Buenos Aires — coordinar cobertura equipo ANTES de salir",
]

overdue_cronicos = [
    ("Daryza — Cotizacion lista 30+ MPs", "18 semanas", "Jennifer Segura"),
    ("PO Norway — Inventario pendiente", "12 semanas", "Carlos Artavia"),
    ("Plasticos cold visits — Tigre, Andinaplast, Nicoll", "9+ semanas", "Victor Alfaro"),
    ("Bruna Brain M1 pruebas — Andres pendiente desde 10 jul", "1 semana", "Andres Bruna"),
]

intel_correos = [
    ("<strong>Read.AI (10 jul) — Bruna Brain:</strong> M1 listo para produccion con trigger automatico lunes 7am. Apollo/HubSpot integrados. MCP+Vittrex dashboard en nube listo. ACCION Andres: unirse canal de pruebas y ejecutar M1 HOY.",
     "Read.AI (10 jul) — Bruna Brain: M1 listo para produccion con trigger automatico lunes 7am. Apollo/HubSpot integrados. MCP+Vittrex dashboard en nube listo. ACCION Andres: unirse canal pruebas y ejecutar M1 HOY."),
    ("<strong>Read.AI (23 jun) — Oral Care:</strong> Reunion confirmada. Planta armado tubos trasladada Chorrillos → Lurin. Muestras en lab sin usar. Diego Gomez debio enviar req formal. Jorge: confirmar status.",
     "Read.AI (23 jun) — Oral Care: Reunion confirmada. Planta trasladada Chorrillos → Lurin. Muestras en lab. Diego Gomez debio enviar req formal. Jorge: confirmar status."),
    ("<strong>Google Alerts TiO2 (sem completa):</strong> ilmenite, Lomon, Kronos, Tronox, ti-pure, Henan Billions activos. Mercado en movimiento. Compartir con Jennifer para Universal Colors y prospectos pintura.",
     "Google Alerts TiO2 (sem completa): ilmenite, Lomon, Kronos, Tronox, ti-pure, Henan Billions activos. Compartir con Jennifer para Universal Colors."),
    ("<strong>Viajes Andres confirmados:</strong> Lima (19 jul), Santiago+Temuco/ZCO (21 jul via JetSMART+LAN), Buenos Aires (26 jul via Aerolineas YKJGZQ). Coordinar cobertura equipo esta semana.",
     "Viajes Andres: Lima (19 jul), Santiago+Temuco (21 jul), Buenos Aires (26 jul). Coordinar cobertura equipo esta semana."),
    ("<strong>Sin emails directos de:</strong> Daryza, Aurora, Romex, Cafetal, Mineria, Universal Colors, Qroma en inbox esta semana. Equipo debe salir a buscar, no esperar.",
     "Sin emails de: Daryza, Aurora, Romex, Cafetal, Mineria, Universal Colors, Qroma. Equipo debe salir a buscar, no esperar."),
]

# ─── GENERAR DOCX ─────────────────────────────────────────────────────────────
doc = Document()

# Titulo
title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
tr = title.add_run(f"\U0001f1f5\U0001f1ea  BRUNA PERU \u2014 WEEKLY REVIEW")
tr.bold = True
tr.font.size = Pt(22)
tr.font.color.rgb = NAVY

sub = doc.add_paragraph()
sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
sr = sub.add_run(f"Agenda Ejecutiva | {FECHA} | Causita Intelligence")
sr.font.size = Pt(11)
sr.font.color.rgb = GRAY

add_divider(doc)

# ─── URGENTES ───────────────────────────────────────────────────────────────
add_heading(doc, "\U0001f534  URGENTE ESTA SEMANA", 1, RED)
for u in urgentes:
    add_bullet(doc, u)

add_divider(doc)

# ─── INTEL EMAIL ────────────────────────────────────────────────────────────
add_heading(doc, "\U0001f4ec  INTEL DE CORREOS (07 \u2013 13 jul 2026)", 1, NAVY)
for _, txt in intel_correos:
    add_bullet(doc, txt)

add_divider(doc)

# ─── CUENTAS ────────────────────────────────────────────────────────────────
add_heading(doc, "\U0001f4cb  ESTADO DE CUENTAS (12 cuentas activas)", 1, NAVY)
for nombre, status, subtareas in cuentas:
    add_heading(doc, f"  {nombre}", 2,
        RED if status == "NO AVANZADO" else
        GREEN if status == "HECHO" else
        YELLOW if status == "AVANZADO" else
        PURPLE if status == "NUEVO" else ORANGE)
    for tarea, resp, prioridad in subtareas:
        add_status_item(doc, f"[{prioridad}] {tarea}", status,
            responsible=resp if resp else "")

add_divider(doc)

# ─── OVERDUE CRONICO ─────────────────────────────────────────────────────────
add_heading(doc, "\u23f0  OVERDUE CR\u00d3NICO", 1, RED)
for item, tiempo, responsable in overdue_cronicos:
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(0.3)
    r1 = p.add_run(f"\u2022 {item} \u2014 ")
    r1.font.size = Pt(10)
    r2 = p.add_run(f"{tiempo}")
    r2.bold = True
    r2.font.color.rgb = RED
    r2.font.size = Pt(10)
    r3 = p.add_run(f"  \u2192 {responsable}")
    r3.font.color.rgb = ACCENT
    r3.font.size = Pt(9)

add_divider(doc)

# ─── RESPONSABLES ───────────────────────────────────────────────────────────
add_heading(doc, "\U0001f465  RESPONSABLES \u2014 PRIORIDAD HOY", 1, NAVY)
for nombre, data in pendientes.items():
    add_heading(doc, f"  {nombre} ({data['rol']})", 2, DARK)
    for item, status in data["items"]:
        add_status_item(doc, item, status)

add_divider(doc)

# Footer
foot = doc.add_paragraph()
foot.alignment = WD_ALIGN_PARAGRAPH.CENTER
fr = foot.add_run(f"Causita \u00b7 Bruna Per\u00fa / VCB S.A.C. \u00b7 Weekly Review \u00b7 {FECHA}")
fr.font.size = Pt(8)
fr.font.color.rgb = GRAY

docx_path = os.path.join(OUTPUT_DIR, f"Agenda_BrunaPeru_{FECHA_FILE}.docx")
doc.save(docx_path)
print(f"DOCX saved: {docx_path}")

# Validar
doc2 = Document(docx_path)
paras = len(doc2.paragraphs)
size = os.path.getsize(docx_path)
print(f"DOCX validation OK | paragraphs: {paras}")
print(f"DOCX size: {size:,} bytes")

# ─── GENERAR HTML DASHBOARD ────────────────────────────────────────────────────
STATUS_EMOJI = {
    "HECHO": ("✅", "#27AE60"),
    "AVANZADO": ("🟡", "#F39C12"),
    "NO AVANZADO": ("🔴", "#C0392B"),
    "VERIFICAR": ("🔶", "#E67E22"),
    "NUEVO": ("🆕", "#8E44AD"),
}

def status_badge(s):
    emoji, color = STATUS_EMOJI.get(s, ("⚪", "#95A5A6"))
    return f'<span style="background:{color};color:#fff;padding:2px 7px;border-radius:4px;font-size:11px;font-weight:bold;">{emoji} {s}</span>'

html = f"""<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Bruna Perú | Weekly Review | {FECHA}</title>
<style>
  body{{font-family:'Segoe UI',Arial,sans-serif;background:#F4F6F7;margin:0;padding:20px;color:#2C3E50}}
  .header{{background:linear-gradient(135deg,#1B4F72,#2E86C1);color:#fff;padding:24px 30px;border-radius:10px;margin-bottom:20px}}
  .header h1{{margin:0;font-size:26px}}
  .header p{{margin:6px 0 0;opacity:0.85;font-size:13px}}
  .urgente{{background:#FDEDEC;border-left:5px solid #C0392B;padding:14px 18px;border-radius:6px;margin-bottom:20px}}
  .urgente h2{{color:#C0392B;margin:0 0 10px;font-size:16px}}
  .urgente li{{font-size:13px;margin:4px 0}}
  .intel{{background:#EAF2FF;border-left:5px solid #2E86C1;padding:14px 18px;border-radius:6px;margin-bottom:20px}}
  .intel h2{{color:#1B4F72;margin:0 0 10px;font-size:16px}}
  .intel li{{font-size:13px;margin:4px 0}}
  .viaje{{background:#FEF9E7;border-left:5px solid #F39C12;padding:10px 16px;border-radius:6px;margin-bottom:16px;font-size:13px}}
  .viaje strong{{color:#E67E22}}
  .section{{background:#fff;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,0.1);padding:18px 22px;margin-bottom:18px}}
  .section h2{{color:#1B4F72;font-size:17px;margin:0 0 12px;border-bottom:2px solid #2E86C1;padding-bottom:6px}}
  .cuenta{{margin-bottom:14px;padding:10px 14px;border-radius:6px;background:#FDFEFE;border:1px solid #EAECEE}}
  .cuenta h3{{margin:0 0 8px;font-size:14px;color:#2C3E50}}
  .sub{{font-size:12px;color:#566573;margin:3px 0 3px 12px}}
  .sub .resp{{color:#2E86C1;font-weight:bold}}
  .sub .pri{{background:#D5D8DC;color:#2C3E50;padding:1px 5px;border-radius:3px;font-size:10px}}
  .overdue{{background:#FDEDEC;padding:8px 12px;border-radius:4px;margin:4px 0;font-size:12px}}
  .overdue .tiempo{{color:#C0392B;font-weight:bold}}
  .resp-block{{margin-bottom:10px;padding:10px 14px;background:#F8F9FA;border-radius:6px;border-left:3px solid #2E86C1}}
  .resp-block h3{{margin:0 0 6px;color:#1B4F72;font-size:13px}}
  .item{{font-size:12px;margin:3px 0}}
  .footer{{text-align:center;font-size:11px;color:#95A5A6;margin-top:20px}}
  .grid{{display:grid;grid-template-columns:1fr 1fr;gap:14px}}
  @media(max-width:600px){{.grid{{grid-template-columns:1fr}}}}
</style>
</head>
<body>
<div class="header">
  <h1>🇵🇪 BRUNA PERÚ — Weekly Review</h1>
  <p>VCB S.A.C. · {FECHA} · Causita Intelligence · <strong>12 cuentas activas</strong></p>
</div>

<div class="urgente">
  <h2>🔴 URGENTE ESTA SEMANA</h2>
  <ul>
"""
for u in urgentes:
    html += f"    <li>{u}</li>\n"

html += """  </ul>
</div>

<div class="viaje">
  <strong>✈️ AGENDA VIAJES ANDRÉS:</strong> Lima (19 jul) · Santiago + Temuco/ZCO (21 jul · JetSMART + LAN) · Buenos Aires (26 jul · Aerolíneas YKJGZQ) — Coordinar cobertura equipo ANTES del 19.
</div>

<div class="intel">
  <h2>📬 INTEL DE CORREOS (07 – 13 jul 2026)</h2>
  <ul>
"""
for html_txt, _ in intel_correos:
    html += f"    <li>{html_txt}</li>\n"

html += """  </ul>
</div>

<div class="section">
  <h2>📋 ESTADO DE CUENTAS</h2>
  <div class="grid">
"""
for nombre, status, subtareas in cuentas:
    emoji, color = STATUS_EMOJI.get(status, ("⚪", "#95A5A6"))
    bg = "#FDEDEC" if status == "NO AVANZADO" else "#EAF5FF" if status == "AVANZADO" else "#F5EEF8" if status == "NUEVO" else "#FEF9E7" if status == "VERIFICAR" else "#EAFAF1"
    html += f'    <div class="cuenta" style="background:{bg}">\n'
    html += f'      <h3>{nombre} &nbsp; {status_badge(status)}</h3>\n'
    for tarea, resp, prioridad in subtareas:
        pri_color = "#C0392B" if prioridad == "P1" else "#E67E22" if prioridad == "P2" else "#95A5A6"
        html += f'      <div class="sub"><span class="pri" style="background:{pri_color};color:#fff">{prioridad}</span> {tarea}'
        if resp:
            html += f' <span class="resp">→ {resp}</span>'
        html += '</div>\n'
    html += '    </div>\n'

html += """  </div>
</div>

<div class="section">
  <h2>⏰ OVERDUE CRÓNICO</h2>
"""
for item, tiempo, responsable in overdue_cronicos:
    html += f'  <div class="overdue">• {item} — <span class="tiempo">{tiempo}</span> <span style="color:#2E86C1">→ {responsable}</span></div>\n'

html += """</div>

<div class="section">
  <h2>👥 RESPONSABLES — PRIORIDAD HOY</h2>
"""
for nombre, data in pendientes.items():
    html += f'  <div class="resp-block">\n'
    html += f'    <h3>{nombre} <span style="color:#95A5A6;font-weight:normal">({data["rol"]})</span></h3>\n'
    for item, status in data["items"]:
        emoji, color = STATUS_EMOJI.get(status, ("⚪", "#95A5A6"))
        html += f'    <div class="item">{emoji} {item}</div>\n'
    html += '  </div>\n'

html += f"""</div>

<div class="footer">
  Causita · Bruna Perú / VCB S.A.C. · Weekly Review · {FECHA}<br>
  <em>Confidencial — Uso Interno</em>
</div>
</body>
</html>
"""

html_path = os.path.join(OUTPUT_DIR, f"Dashboard_BrunaPeru_{FECHA_FILE}.html")
with open(html_path, "w", encoding="utf-8") as f:
    f.write(html)
print(f"HTML saved: {html_path}")
print(f"HTML size: {os.path.getsize(html_path):,} bytes")
print("DONE")
