#!/usr/bin/env python3
"""Genera Agenda DOCX + HTML Dashboard para Bruna Peru Weekly Review — 15 Jun 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 = "15 de junio, 2026"
FECHA_FILE = "2026-06-15"
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 al 15-Jun-2026 ─────────────────────────────────
#
# FUENTE PRINCIPAL:
#   Read AI "Bruna Brain" Jun 12 (sesion 7): API Penta DESBLOQUEADO por Edwin.
#     Flujo M1 operativo en N8n: partidas arancelarias → Supabase (RUC+DUA).
#     Decisión pendiente: contratar API Penta $900/año para produccion.
#     M2 disenado: M2a (marketing) + M2b (scoring/activacion).
#     Scoring: activo >7, nurturing=medio, descartar 1-3.
#     Edwin: crear LinkedIn + transferir a Atlas/Bruna. SharePoint anclado local.
#     Apollo como fuente de datos complementaria.
#     Stiff: comprar "piepenta" URGENTE esta semana.
#
#   Read AI "PLAN DE TRABAJO" Jun 5: Carlos Calderon incorporado.
#     Jenny: fichas + muestras plazo ~19 jun. Victor: crear WA con Carlos C.
#     OPP Films sigue como target. Proxima reunion seguimiento semana 15-jun.
#
#   Google Alerts TiO2 Jun 13-14:
#     - Taineng Chemical sube TiO2: +1,000 CNY/t domestico, +$150/t internacional (vigente desde Jun 5)
#     - Planta Crimea Titan DESTRUIDA (23 impactos drones ucranianos Jun 13) — mayor productor TiO2
#       Europa del Este fuera de operacion → ESCASEZ + PRECIOS AL ALZA
#     - Tronox TROX: earns bajo presion, precio TiO2 comprimido pero vol al alza
#
#   OVERDUE ACTUALIZADOS: Daryza 14 sem, Org chart Alicorp 9 sem, PO Norway 8 sem.

pendientes = {
    "Victor Alfaro": {
        "rol": "Gerente General Lima",
        "items": [
            ("Revisar y aprobar prospectos deal activos en Prospectus/Teams para desbloquear flujo M2", "VERIFICAR"),
            ("Crear grupo WhatsApp con Carlos Calderon (comprometido Jun 5 — ya 10 dias overdue)", "NO AVANZADO"),
            ("Follow-up Mineria (Oscar Rosas) — confirmar status reunion y propuesta MIBC/xantatos", "VERIFICAR"),
            ("Qroma (Baldion) — neopreno, caucho clorado, parafina: primer contacto via Carlos C", "NO AVANZADO"),
            ("OPP Films — apoyar reunion con Eligero Valdion (gerente de planta)", "VERIFICAR"),
        ]
    },
    "Jennifer Segura": {
        "rol": "Lider Mercado Peru",
        "items": [
            ("Cotizacion formal Daryza (lista 30+ MPs recibida 11 mar) — OVERDUE 14 SEMANAS", "NO AVANZADO"),
            ("Fichas tecnicas + muestras (plazo acordado Jun 5: ~2 sem, vence ~19 jun)", "AVANZADO"),
            ("Seguimiento Aurora Paint — resinas epoxicas VYTA BPA: reportar respuesta o silencio", "VERIFICAR"),
            ("Universal Colors — TiO2 588 y oxidos hierro: urgente por alza global precios", "VERIFICAR"),
            ("Coordinar reunion de seguimiento PLAN DE TRABAJO semana 15-jun con todos", "VERIFICAR"),
        ]
    },
    "Andres Bruna": {
        "rol": "Director Nuevos Mercados",
        "items": [
            ("Propuesta tecnica compacta OPP Films para Eligero Valdion — enviada?", "VERIFICAR"),
            ("Identificar candidatos con nombre/apellido para abordajes comerciales inmediatos", "VERIFICAR"),
            ("Subir articulo de orquestacion al repositorio Teams (Bruna Brain)", "NO AVANZADO"),
            ("Crear repositorio de presupuesto con licencias y costos del proyecto", "VERIFICAR"),
            ("Validar costos y cargas API Penta Peru con Steve", "VERIFICAR"),
            ("Decidir contratacion API Penta ($900/ano) para entorno produccion", "NUEVO"),
            ("Status Oral Care — tubos, formula, equipos, Ruby", "VERIFICAR"),
            ("Investigar alternativa a Apolo para mercado local peruano", "NUEVO"),
        ]
    },
    "Carlos Calderon": {
        "rol": "Comercial (OMIA / Pinturas / Construccion)",
        "items": [
            ("Lista de productos identificados + especificaciones para cruce con portafolio — entregada?", "VERIFICAR"),
            ("Leads pinturas: Anipsa, Perupaint, Soprint, Interpaint, Qroma — proponer visitas", "VERIFICAR"),
            ("Acceso a group WhatsApp (Victor debe crear)", "VERIFICAR"),
        ]
    },
    "Jorge Bruna": {
        "rol": "Empaques",
        "items": [
            ("Status liner Romex/Nico — confirmar problemas de produccion resueltos", "VERIFICAR"),
            ("Update mecanica tubos + empaque Oral Care", "VERIFICAR"),
        ]
    },
    "Carlos Artavia": {
        "rol": "Logistica / SPU",
        "items": [
            ("Confirmar pago impuestos + liberacion carga con Ileana", "VERIFICAR"),
            ("CargoFlex: 6,600 kg restantes — coordinar entrega", "VERIFICAR"),
            ("PO Norway — inventario status (OVERDUE 8 sem)", "NO AVANZADO"),
        ]
    },
    "Edwin Viales / Stiff Fernandez": {
        "rol": "Bruna Brain (Tech)",
        "items": [
            ("API Penta DESBLOQUEADO — validar flujo M1 completo en produccion (mocks vs real)", "AVANZADO"),
            ("Crear pagina LinkedIn y transferir administracion a Atlas/Bruna", "VERIFICAR"),
            ("Comprar 'piepenta' ESTA SEMANA (Stiff — comprometido Jun 12)", "NO AVANZADO"),
            ("Ejecutar pruebas M2 (scoring + activacion) y documentar dudas tecnicas", "VERIFICAR"),
            ("Ajustar scoring: revisar logica activo>7 / nurturing / descartar 1-3", "VERIFICAR"),
            ("Publicar al menos 1 pieza validada en redes (IG/FB)", "VERIFICAR"),
            ("Ajustar mapeo M2 para incluir M2A y M2B", "VERIFICAR"),
        ]
    },
    "Vanessa Garcia": {
        "rol": "BDU",
        "items": [
            ("Org chart actualizado Grupo Romero + costos reales Policloropreno (OVERDUE 9 sem)", "NO AVANZADO"),
            ("Subir factura al sistema — agilizar recepcion", "VERIFICAR"),
        ]
    },
}

cuentas = [
    ("Alicorp / Grupo Romero", "VERIFICAR", [
        ("Deal activos Apollo/HubSpot — aprobacion pendiente Victor para activar M2A", "Victor Alfaro", "P1"),
        ("Lufarol, CaCO3, 12 productos aprobados — status muestras + homologacion", "Jennifer Segura", "P1"),
        ("Org chart actualizado + costos reales Policloropreno (OVERDUE 9 sem)", "Vanessa Garcia", "P1"),
    ]),
    ("Cafetal (K2CO3 oral)", "AVANZADO", [
        ("CargoFlex: 6,600 kg restantes — coordinar entrega esta semana", "Carlos Artavia", "P1"),
        ("Confirmar pago impuestos + liberacion carga con Ileana", "Carlos Artavia", "P1"),
    ]),
    ("Romex / Nico", "VERIFICAR", [
        ("Status liner y problemas de produccion — resueltos?", "Jorge Bruna", "P1"),
        ("Update tapas y liners semana 15 jun", "Jorge Bruna", "P2"),
    ]),
    ("Daryza", "NO AVANZADO", [
        ("Lista 30+ MPs recibida 11 mar — cotizacion formal PENDIENTE 14 SEMANAS", "Jennifer Segura", "P1"),
        ("MPs prioritarias: Lauril Eter Sulfato 82t, Ac. Sulfonico 58t, NaOH 50% 46t, PEAD 38t", "", "P1"),
        ("Confirmar llamada de seguimiento con Urbina — no puede pasar otra semana", "Jennifer Segura", "P1"),
    ]),
    ("Aurora Paint", "VERIFICAR", [
        ("Resinas epoxicas VYTA BPA — reportar respuesta o silencio esta semana", "Jennifer Segura", "P1"),
    ]),
    ("Universal Colors", "VERIFICAR", [
        ("MERCADO URGENTE: Crimea Titan destruida (Jun 13) — mayor TiO2 Europa del Este fuera", "", "P1"),
        ("Taineng Chemical +$150/t internacional (vigente Jun 5) — oportunidad de margen", "", "P1"),
        ("TiO2 588 y oxidos de hierro: contactar esta semana aprovechando escasez global", "Jennifer Segura", "P1"),
    ]),
    ("Qroma", "NO AVANZADO", [
        ("Carlos Calderon (ex-OMIA) puede abrir puerta con Baldion — neopreno, caucho clorado", "Carlos Calderon", "P2"),
        ("Victor: coordinar primer contacto via Carlos C", "Victor Alfaro", "P2"),
    ]),
    ("Prospectos Pintura", "VERIFICAR", [
        ("OPP Films (PRIORITARIO): propuesta tecnica para Eligero Valdion — enviada?", "Andres Bruna", "P1"),
        ("Anipsa, Perupaint, Soprint, Interpaint — Carlos Calderon activa leads esta semana", "Carlos Calderon", "P2"),
    ]),
    ("Plasticos", "VERIFICAR", [
        ("Tigre, Andinaplast, Inproplast, Nicoll — cera PE, TiO2, masterbatch", "Victor Alfaro", "P3"),
    ]),
    ("Mineria", "VERIFICAR", [
        ("Oscar Rosas — confirmar status reunion y propuesta MIBC/xantatos", "Victor Alfaro", "P1"),
        ("Ficha tecnica + pricing MIBC y xantatos — listo para enviar?", "Andres Bruna", "P2"),
    ]),
    ("Oral Care", "VERIFICAR", [
        ("Status tubos / formula / equipos — Ruby: update Andres", "Andres Bruna", "P2"),
        ("Mecanica tubos y empaque: update Jorge Bruna", "Jorge Bruna", "P2"),
    ]),
    ("Alimentos", "VERIFICAR", [
        ("Pursuit, JAVA, Creafoods — Carlos Calderon puede tener leads en sector", "Carlos Calderon", "P3"),
    ]),
]

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

# Header
title_p = doc.add_paragraph()
title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
title_r = title_p.add_run("🇵🇪  CAUSITA — Weekly Review")
title_r.bold = True
title_r.font.size = Pt(22)
title_r.font.color.rgb = NAVY

title_p2 = doc.add_paragraph()
title_p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
title_r2 = title_p2.add_run(f"Bruna Peru / VCB S.A.C.  |  Semana del {FECHA}")
title_r2.font.size = Pt(12)
title_r2.font.color.rgb = ACCENT

conf_p = doc.add_paragraph()
conf_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
conf_r = conf_p.add_run("CONFIDENCIAL — USO INTERNO")
conf_r.bold = True
conf_r.font.size = Pt(9)
conf_r.font.color.rgb = RED

add_divider(doc)

# INTEL DE SEMANA
add_heading(doc, "INTEL SEMANA (8–15 Jun 2026)", level=1, color=NAVY)

intel_items = [
    ("🔴 MERCADO URGENTE", "Crimea Titan DESTRUIDA — Jun 13", "23 impactos drones ucranianos. Mayor productor TiO2 Europa del Este fuera de operacion. Escasez = oportunidad de precio. Contactar Universal Colors HOY.", RED),
    ("📈 PRECIOS TIO2", "Taineng Chemical +$150/t internacional", "Vigente desde Jun 5. Multiples productores chinos ajustando precios al alza. Ventana strategica para cerrar cotizaciones ahora.", ORANGE),
    ("🟢 AVANCE BRAIN", "API Penta DESBLOQUEADO — Jun 12", "Edwin resolvio bloqueo. Flujo M1 operativo en N8n: partidas arancelarias → Supabase. Scoring activo >7 / nurturing / descartar 1-3. Pendiente: contratar $900/ano para produccion.", GREEN),
    ("🟡 DECISION", "Contratar API Penta ($900/ano)", "Equipo en standby para produccion real. Andres debe decidir esta semana. Mocks validados, siguiente paso: entorno real.", YELLOW),
    ("🟡 OPERATIVO", "Muestras Jenny — plazo 19 jun", "Acordado Jun 5. Plazo en 4 dias. Confirmar avance hoy mismo.", ORANGE),
    ("⚠ OVERDUE CRITICO", "Daryza — 14 semanas sin cotizacion", "Lista 30+ MPs recibida 11-mar. Urbina esperando. Riesgo: perder cuenta.", RED),
]

for tag, title, desc, color in intel_items:
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(0.3)
    p.paragraph_format.space_before = Pt(4)
    r1 = p.add_run(f"{tag}  {title}: ")
    r1.bold = True
    r1.font.color.rgb = color
    r1.font.size = Pt(10)
    r2 = p.add_run(desc)
    r2.font.size = Pt(10)

add_divider(doc)

# PARTE 1
add_heading(doc, "PARTE 1 — REVISION PENDIENTES (semana anterior)", level=1, color=NAVY)
doc.add_paragraph("Fuente: Read AI Bruna Brain Jun 12 + PLAN DE TRABAJO Jun 5 + Google Alerts Jun 13-14.").runs[0].font.size = Pt(9)

for persona, data in pendientes.items():
    add_heading(doc, f"  {persona}  |  {data['rol']}", level=2, color=ACCENT)
    for tarea, status in data["items"]:
        add_status_item(doc, tarea, status, indent_in=0.5)

add_divider(doc)

# PARTE 2
add_heading(doc, "PARTE 2 — AGENDA POR CUENTA (12 cuentas)", level=1, color=NAVY)

for i, (nombre, status, items) in enumerate(cuentas, 1):
    add_heading(doc, f"  {i}. {nombre}", level=2, color=ACCENT)
    sp = doc.add_paragraph()
    sp.paragraph_format.left_indent = Inches(0.4)
    sr = sp.add_run(f"Status: [{status}]")
    sr.bold = True
    sr.font.size = Pt(10)
    sr.font.color.rgb = STATUS_COLORS.get(status, DARK)

    for tarea, responsable, prioridad in items:
        p_color = RED if prioridad == "P1" else ORANGE if prioridad == "P2" else GRAY
        p = doc.add_paragraph()
        p.paragraph_format.left_indent = Inches(0.6)
        p.paragraph_format.space_before = Pt(2)
        p.paragraph_format.space_after = Pt(2)
        pr = p.add_run(f"[{prioridad}] ")
        pr.font.color.rgb = p_color
        pr.bold = True
        pr.font.size = Pt(10)
        tr = p.add_run(tarea)
        tr.font.size = Pt(10)
        if responsable:
            rr = p.add_run(f"  \u2192 {responsable}")
            rr.font.color.rgb = ACCENT
            rr.font.size = Pt(9)

add_divider(doc)

# PARTE 3 — PROYECTOS ESTRATEGICOS
add_heading(doc, "PARTE 3 — PROYECTOS ESTRATEGICOS", level=1, color=NAVY)

proyectos = [
    ("Universal Colors — VENTANA DE MERCADO HOY", RED, [
        "URGENTE: Crimea Titan destruida Jun 13 — TiO2 Europa del Este fuera de operacion",
        "Taineng +$150/t vigente — presion de precios al alza en todos los proveedores",
        "Jenny: contactar esta semana con argumentos de escasez para cerrar cotizacion TiO2 588",
        "Andres: preparar brief de mercado con alertas como soporte comercial",
    ]),
    ("Bruna Brain — Produccion", PURPLE, [
        "API Penta DESBLOQUEADO — flujo M1 validado con mocks",
        "Decision urgente: contratar $900/ano para produccion real (Andres esta semana)",
        "Edwin: pruebas M2 scoring/activacion + ajuste logica >7 / medio / 1-3",
        "Edwin: crear LinkedIn, publicar 1 pieza IG/FB, ajustar mapeo M2A+M2B",
        "Stiff: comprar 'piepenta' esta semana (comprometido Jun 12)",
        "Proxima revision Bruna Brain: JUEVES 10 AM",
    ]),
    ("OPP Films (PRIORITARIO)", PURPLE, [
        "Alto volumen titanio + polimeros — contacto clave: Eligero Valdion (gerente planta)",
        "Andres: propuesta tecnica compacta — estatus esta semana",
        "Carlos Calderon: aportar contexto pinturas/polimeros para propuesta",
    ]),
    ("Daryza — OVERDUE CRITICO", RED, [
        "14 semanas sin cotizacion formal (lista recibida 11-mar)",
        "Jenny: enviar esta semana SIN FALTA — riesgo de perder cuenta",
        "Items prioritarios: Lauril Eter Sulfato 82t, Ac. Sulfonico 58t, NaOH 50% 46t",
        "Confirmar reunion con Urbina esta semana",
    ]),
    ("Mineria — Oscar Rosas", PURPLE, [
        "Victor: confirmar meeting + enviar propuesta MIBC/xantatos",
        "Preparar ficha tecnica + pricing lista para envio",
    ]),
    ("Oral Care", PURPLE, [
        "Andres: update status tubos / formula / equipos — Ruby",
        "Jorge Bruna: mecanica tubos y empaque",
    ]),
]

for nombre, color, items in proyectos:
    add_heading(doc, f"  {nombre}", level=2, color=color)
    for item in items:
        add_bullet(doc, item)

add_divider(doc)

# RESUMEN EJECUTIVO
add_heading(doc, "RESUMEN EJECUTIVO", level=1, color=NAVY)

add_heading(doc, "HOY (lun 15 jun) — Urgente", level=2, color=RED)
urgentes = [
    ("MERCADO: Crimea Titan destruida — contactar Universal Colors con brief de escasez HOY", "NUEVO", "Jennifer Segura"),
    ("Daryza: cotizacion formal — 14 sem overdue, ultimo aviso", "NO AVANZADO", "Jennifer Segura"),
    ("Victor: crear grupo WhatsApp Carlos Calderon (10 dias de retraso)", "NO AVANZADO", "Victor Alfaro"),
    ("Andres: decidir contratacion API Penta $900/ano — equipo en standby", "NUEVO", "Andres Bruna"),
    ("Stiff: comprar 'piepenta' hoy (comprometido Jun 12)", "NO AVANZADO", "Stiff"),
    ("Jenny: confirmar avance muestras — plazo Jun 19 en 4 dias", "VERIFICAR", "Jennifer Segura"),
]
for item in urgentes:
    add_status_item(doc, item[0], item[1], indent_in=0.4)

add_heading(doc, "ESTA SEMANA (15-20 jun)", level=2, color=ORANGE)
semana_items = [
    "Jenny: fichas tecnicas + muestras listas (plazo Jun 19 acordado Jun 5)",
    "Jenny: contactar Universal Colors aprovechando shock Crimea Titan",
    "Jenny: cotizacion Aurora Paint (resinas epoxicas VYTA BPA)",
    "Carlos C: enviar lista de productos + specs para cruce con portafolio",
    "Carlos C: activar leads pinturas: Anipsa, Perupaint, Soprint, Interpaint",
    "Andres: propuesta OPP Films a Eligero Valdion",
    "Andres: investigar alternativa a Apolo para mercado local peruano",
    "Edwin: pruebas M2 scoring/activacion + documentar dudas tecnicas",
    "Edwin: crear LinkedIn + publicar 1 pieza en redes",
    "Victor: follow-up Mineria Oscar Rosas + propuesta MIBC",
    "Jorge: update liner Romex/Nico + mecanica Oral Care",
    "Carlos A: coordinar 6,600 kg CargoFlex",
    "REUNION PLAN TRABAJO semana 15 jun (a coordinar por Jenny)",
    "BRUNA BRAIN: jueves 10 AM (revision semanal)",
]
for item in semana_items:
    add_status_item(doc, item, "VERIFICAR", indent_in=0.4)

add_heading(doc, "OVERDUE CRONICO", level=2, color=RED)
overdue = [
    ("Cotizacion Daryza (lista recibida 11 mar)", "Jennifer Segura", 14),
    ("Org chart Alicorp actualizado + costos Policloropreno", "Vanessa Garcia", 9),
    ("PO Norway — inventario status", "Carlos Artavia", 8),
    ("Grupo WhatsApp con Carlos Calderon (comprometido Jun 5)", "Victor Alfaro", 2),
]
for tarea, resp, sem in overdue:
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(0.4)
    pr = p.add_run(f"[{sem} sem OVERDUE] ")
    pr.bold = True
    pr.font.color.rgb = RED
    pr.font.size = Pt(10)
    tr = p.add_run(f"{tarea}  -> {resp}")
    tr.font.size = Pt(10)

add_divider(doc)

# Footer
fp = doc.add_paragraph()
fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
fr = fp.add_run(f"Generado por Causita (Hermes Agent) | {FECHA} | Confidencial — Bruna Peru / VCB S.A.C.")
fr.font.size = Pt(8)
fr.font.color.rgb = GRAY
fr.italic = True

docx_path = f"{OUTPUT_DIR}/Agenda_BrunaPeru_{FECHA_FILE}.docx"
doc.save(docx_path)
print(f"DOCX saved: {docx_path}")

# ─── HTML ──────────────────────────────────────────────────────────────
def badge(status):
    cls = status.replace(" ", "-")
    return f'<span class="badge badge-{cls}">{status}</span>'

def prio_badge(p):
    return f'<span class="badge badge-{p}">{p}</span>'

cards_html = ""
for i, (nombre, status, items) in enumerate(cuentas, 1):
    items_html = ""
    for tarea, responsable, prioridad in items:
        resp_html = f'<br><span class="item-resp">&rarr; {responsable}</span>' if responsable else ""
        items_html += f'<li>{prio_badge(prioridad)} <div><span class="item-text">{tarea}</span>{resp_html}</div></li>\n'
    cards_html += f'''
  <div class="card">
    <div class="card-title">{i}. {nombre} {badge(status)}</div>
    <ul class="item-list">{items_html}</ul>
  </div>
'''

resp_sections_html = ""
for persona, data in pendientes.items():
    items_html = ""
    for tarea, status in data["items"]:
        items_html += f'<li><div class="checkbox"></div><div><span class="item-text">{tarea}</span> {badge(status)}</div></li>\n'
    resp_sections_html += f'''
<div class="resp-section">
  <div class="resp-name">{persona}</div>
  <div class="resp-rol">{data["rol"]}</div>
  <ul class="resp-items">{items_html}</ul>
</div>
'''

# Intel cards
intel_cards = [
    ("🔴 MERCADO URGENTE", "Crimea Titan DESTRUIDA — Jun 13", "23 impactos drones. Mayor productor TiO2 Europa del Este fuera de operacion. Escasez = oportunidad de precio ahora.", "card-urgent"),
    ("📈 PRECIOS TIO2", "Taineng +$150/t internacional", "Vigente desde Jun 5. Multiples productores chinos ajustando al alza. Ventana para cerrar cotizaciones.", "card-market"),
    ("🟢 AVANCE BRAIN", "API Penta DESBLOQUEADO", "Flujo M1 operativo en N8n. M2 disenado (M2a + M2b). Proxima decision: $900/ano para produccion.", "card-new"),
    ("⚠ DECISION PENDIENTE", "API Penta $900/ano", "Equipo en standby. Andres decide esta semana para activar entorno real.", "card-urgent"),
    ("📦 LOGISTICA", "CargoFlex: 6,600 kg pendientes", "Primera entrega 5,400 kg coordinada. Restantes sin confirmar. Ileana: impuestos pendientes.", "card-info"),
    ("🔴 OVERDUE CRITICO", "Daryza — 14 semanas", "Lista 30+ MPs recibida 11-mar. Cotizacion formal: riesgo de perder cuenta esta semana.", "card-urgent"),
]

intel_html = ""
for tag, title, desc, cls in intel_cards:
    intel_html += f'''
  <div class="card {cls}">
    <div class="intel-tag">{tag}</div>
    <div class="intel-title">{title}</div>
    <div class="intel-desc">{desc}</div>
  </div>
'''

html = f"""<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard Bruna Peru - 15 Jun 2026</title>
<style>
  * {{ box-sizing: border-box; margin: 0; padding: 0; }}
  body {{ font-family: 'Segoe UI', Arial, sans-serif; background: #0d1b2a; color: #e8edf2; min-height: 100vh; }}
  .header {{ background: linear-gradient(135deg, #1B4F72 0%, #0d2d44 100%); padding: 24px 32px; border-bottom: 3px solid #2E86C1; }}
  .header h1 {{ font-size: 1.7rem; font-weight: 700; color: #fff; }}
  .header .sub {{ color: #85c1e9; font-size: 0.9rem; margin-top: 4px; }}
  .header .meta {{ color: #7fb3d3; font-size: 0.78rem; margin-top: 8px; }}
  .conf {{ display: inline-block; background: #c0392b; color: #fff; padding: 2px 10px; border-radius: 3px; font-size: 0.72rem; font-weight: 700; margin-top: 8px; }}
  .container {{ max-width: 1400px; margin: 0 auto; padding: 24px 16px; }}
  .section-title {{ font-size: 1.15rem; font-weight: 700; color: #2E86C1; border-left: 4px solid #2E86C1; padding-left: 12px; margin: 28px 0 14px; }}
  .grid {{ display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }}
  .grid-3 {{ display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 14px; }}
  .card {{ background: #1a2a3a; border-radius: 10px; padding: 14px; border: 1px solid #243647; }}
  .card-urgent {{ border-left: 4px solid #c0392b; }}
  .card-new {{ border-left: 4px solid #27ae60; }}
  .card-market {{ border-left: 4px solid #2980b9; }}
  .card-info {{ border-left: 4px solid #27ae60; }}
  .card-title {{ font-size: 0.95rem; font-weight: 700; color: #85c1e9; margin-bottom: 8px; }}
  .intel-tag {{ font-size: 0.75rem; font-weight: 700; color: #aaa; margin-bottom: 4px; }}
  .intel-title {{ font-size: 0.95rem; font-weight: 700; color: #fff; margin-bottom: 4px; }}
  .intel-desc {{ font-size: 0.82rem; color: #b0c4d8; }}
  .item-list {{ list-style: none; margin-top: 6px; }}
  .item-list li {{ display: flex; align-items: flex-start; gap: 6px; margin-bottom: 5px; font-size: 0.84rem; }}
  .item-text {{ color: #c8d8e8; }}
  .item-resp {{ color: #5dade2; font-size: 0.78rem; }}
  .badge {{ display: inline-block; padding: 1px 7px; border-radius: 3px; font-size: 0.72rem; font-weight: 700; white-space: nowrap; }}
  .badge-HECHO {{ background: #1e8449; color: #fff; }}
  .badge-AVANZADO {{ background: #b7950b; color: #fff; }}
  .badge-NO-AVANZADO {{ background: #922b21; color: #fff; }}
  .badge-VERIFICAR {{ background: #935116; color: #fff; }}
  .badge-NUEVO {{ background: #6c3483; color: #fff; }}
  .badge-P1 {{ background: #c0392b; color: #fff; }}
  .badge-P2 {{ background: #e67e22; color: #fff; }}
  .badge-P3 {{ background: #566573; color: #fff; }}
  .resp-section {{ background: #1a2a3a; border-radius: 8px; padding: 12px 14px; margin-bottom: 12px; border: 1px solid #243647; }}
  .resp-name {{ font-size: 1rem; font-weight: 700; color: #fff; }}
  .resp-rol {{ font-size: 0.78rem; color: #5dade2; margin-bottom: 8px; }}
  .resp-items {{ list-style: none; }}
  .resp-items li {{ display: flex; align-items: flex-start; gap: 8px; margin-bottom: 5px; font-size: 0.83rem; color: #c8d8e8; }}
  .checkbox {{ width: 14px; height: 14px; border: 2px solid #2E86C1; border-radius: 2px; flex-shrink: 0; margin-top: 1px; }}
  .overdue-item {{ background: #1f0a0a; border: 1px solid #922b21; border-radius: 6px; padding: 8px 12px; margin-bottom: 6px; }}
  .overdue-weeks {{ font-size: 0.8rem; font-weight: 700; color: #e74c3c; }}
  .overdue-text {{ font-size: 0.85rem; color: #e0b0b0; }}
  .overdue-resp {{ font-size: 0.78rem; color: #888; }}
  .market-alert {{ background: #1a0a0a; border: 2px solid #c0392b; border-radius: 8px; padding: 12px 16px; margin-bottom: 16px; }}
  .market-alert-title {{ font-size: 1rem; font-weight: 700; color: #e74c3c; margin-bottom: 6px; }}
  .market-alert-body {{ font-size: 0.88rem; color: #e0c0c0; }}
  .footer {{ text-align: center; padding: 24px; color: #4a6174; font-size: 0.78rem; margin-top: 32px; }}
</style>
</head>
<body>

<div class="header">
  <h1>🇵🇪 CAUSITA — Weekly Review | Bruna Peru / VCB S.A.C.</h1>
  <div class="sub">Semana del {FECHA} &nbsp;|&nbsp; Lima, Perú</div>
  <div class="meta">Generado: lunes 15 Jun 2026 14:00 PET &nbsp;|&nbsp; Fuente: Read AI + Himalaya + Google Alerts</div>
  <div class="conf">⚠ CONFIDENCIAL — USO INTERNO</div>
</div>

<div class="container">

  <div class="market-alert">
    <div class="market-alert-title">🔴 ALERTA DE MERCADO — ACCIÓN INMEDIATA</div>
    <div class="market-alert-body">
      <strong>Crimea Titan destruida (Jun 13)</strong> — Mayor planta TiO2 de Europa del Este fuera de operación tras 23 impactos de drones. 
      <strong>Taineng Chemical +$150/t internacional</strong> (vigente Jun 5).
      Mercado TiO2 en shock de oferta. Ventana estratégica para cerrar cotizaciones con Universal Colors <strong>esta semana</strong>.
    </div>
  </div>

  <div class="section-title">⚡ INTEL SEMANA (8–15 Jun)</div>
  <div class="grid">{intel_html}</div>

  <div class="section-title">📋 CUENTAS (12)</div>
  <div class="grid">{cards_html}</div>

  <div class="section-title">⏰ OVERDUE CRÓNICO</div>
  <div style="max-width: 700px;">
    <div class="overdue-item">
      <div class="overdue-weeks">⚠ 14 SEMANAS</div>
      <div class="overdue-text">Cotizacion Daryza — lista 30+ MPs recibida 11 mar</div>
      <div class="overdue-resp">→ Jennifer Segura</div>
    </div>
    <div class="overdue-item">
      <div class="overdue-weeks">⚠ 9 SEMANAS</div>
      <div class="overdue-text">Org chart Alicorp actualizado + costos reales Policloropreno</div>
      <div class="overdue-resp">→ Vanessa Garcia</div>
    </div>
    <div class="overdue-item">
      <div class="overdue-weeks">⚠ 8 SEMANAS</div>
      <div class="overdue-text">PO Norway — inventario status</div>
      <div class="overdue-resp">→ Carlos Artavia</div>
    </div>
    <div class="overdue-item">
      <div class="overdue-weeks">⚠ 2 SEMANAS</div>
      <div class="overdue-text">Grupo WhatsApp con Carlos Calderon (comprometido Jun 5)</div>
      <div class="overdue-resp">→ Victor Alfaro</div>
    </div>
  </div>

  <div class="section-title">👥 RESPONSABLES — Pendientes semana</div>
  <div class="grid-3">{resp_sections_html}</div>

</div>

<div class="footer">
  Causita · Weekly Review · Bruna Peru / VCB S.A.C. · {FECHA} · Confidencial
</div>
</body>
</html>"""

html_path = f"{OUTPUT_DIR}/Dashboard_BrunaPeru_{FECHA_FILE}.html"
with open(html_path, "w", encoding="utf-8") as f:
    f.write(html)
print(f"HTML saved: {html_path}")

# Validation
doc2 = Document(docx_path)
para_count = len(doc2.paragraphs)
docx_size = os.path.getsize(docx_path)
html_size = os.path.getsize(html_path)
print(f"DOCX validation OK | paragraphs: {para_count}")
print(f"DOCX size: {docx_size:,} bytes")
print(f"HTML size: {html_size:,} bytes")
