#!/usr/bin/env python3
"""Genera Agenda DOCX + HTML Dashboard para Bruna Peru Weekly Review — 25 may 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 = "25 de mayo, 2026"
FECHA_FILE = "2026-05-25"
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 semana 25 may 2026 ─────────────────────────────────────
pendientes = {
    "Victor Alfaro": {
        "rol": "Gerente General Lima",
        "items": [
            ("Reunion Oscar Rosas (mineria) — confirmar si se realizó o reprogramar", "VERIFICAR"),
            ("Qroma / Carlos Baldion — neopreno, caucho clorado: follow-up sin evidencia (2 sem)", "NO AVANZADO"),
            ("Prospectos Pintura (Anipsa, Perupaint, Soprint, Interpaint) — cold visits update", "VERIFICAR"),
            ("Plasticos (Tigre, Andinaplast, Nicoll) — update visitas / cera PE / masterbatch", "VERIFICAR"),
            ("Alimentos — Pursuit, JAVA, Creafoods: seguimiento presencial Lima", "VERIFICAR"),
        ]
    },
    "Jennifer Segura": {
        "rol": "Lider Mercado Peru",
        "items": [
            ("Cotizacion formal Daryza — lista 30+ MPs de Urbina (recibida 11 mar) — OVERDUE 10+ semanas", "NO AVANZADO"),
            ("Aurora Paint — resinas epoxicas VYTA BPA: respuesta pendiente (follow-up urgente)", "NO AVANZADO"),
            ("Universal Colors — TiO2 588 y oxidos de hierro (Erika/Murillo): status update", "VERIFICAR"),
            ("Llamar a Brenda — entender necesidades y productos buscados (Alimentos)", "VERIFICAR"),
            ("Confirmar aprobacion abrillantador (Sebastian) — ligado a licitacion anual 2026", "VERIFICAR"),
            ("Inventario disponible en Peru: reportar tras confirmacion de fechas", "VERIFICAR"),
        ]
    },
    "Andres Bruna": {
        "rol": "Director Nuevos Mercados",
        "items": [
            ("Enviar Excel de clientes y productos aprobados al chat para uso en campo", "VERIFICAR"),
            ("Elaborar portafolio sintetizado Alimentos (~10 productos) para ventas inmediatas", "VERIFICAR"),
            ("Oral Care — status tubos, formula, equipos (Ruby / Oscar J.)", "VERIFICAR"),
            ("MIBC, xantatos, lubricantes — ficha tecnica + pricing para Mineria", "VERIFICAR"),
            ("Pedro Klein — insistir para reunion (sin respuesta)", "NO AVANZADO"),
        ]
    },
    "Jorge Bruna": {
        "rol": "Empaques",
        "items": [
            ("Romex/Nico — status liner y problemas de produccion (chat tecnico)", "VERIFICAR"),
            ("Oral Care — update empaque y mecanica tubos", "VERIFICAR"),
        ]
    },
    "Carlos Artavia": {
        "rol": "Logistica / SPU",
        "items": [
            ("Cafetal — CargoFlex: confirmar liberacion de carga + pago impuestos con Ileana", "NO AVANZADO"),
            ("Cafetal — 6,600 kg restantes: planificar 2da entrega", "VERIFICAR"),
            ("PO Norway — inventario status (OVERDUE 4+ sem)", "NO AVANZADO"),
        ]
    },
    "Vanessa Garcia": {
        "rol": "BDU",
        "items": [
            ("Org chart Alicorp actualizado + costos reales Policloropreno (OVERDUE 5 sem)", "NO AVANZADO"),
            ("Receptora — subir factura al sistema (agilizar)", "VERIFICAR"),
        ]
    },
    "Mildred": {
        "rol": "Admin",
        "items": [
            ("Portal Evis — pagos y facturacion pendientes VCB", "VERIFICAR"),
        ]
    },
    "Lourdes Arley": {
        "rol": "Finanzas",
        "items": [
            ("Confirmacion pago impuestos / fondeos VCB", "VERIFICAR"),
            ("Proyeccion: potasio K2CO3 — cerrar numero con Cafetal para ajustar proyecciones", "NUEVO"),
        ]
    },
}

cuentas = [
    ("Alicorp / Grupo Romero", "VERIFICAR", [
        ("Lufarol, CaCO3, 12 productos aprobados — status muestras (Rafa Villa, Pedro Clay, Estefania)", "Jennifer Segura", "P1"),
        ("Org chart actualizado + costos reales Policloropreno (OVERDUE 5 sem)", "Vanessa Garcia", "P2"),
        ("Evaluacion de Oscar J. para presencia comercial presencial", "Andres Bruna", "P2"),
    ]),
    ("Cafetal (K2CO3 oral)", "AVANZADO", [
        ("CargoFlex: liberacion de carga + pago impuestos con Ileana — URGENTE", "Carlos Artavia", "P1"),
        ("Planificar 2da entrega 6,600 kg restantes", "Carlos Artavia", "P1"),
        ("Alta probabilidad cierre potasio — incorporar a proyecciones financieras", "Lourdes Arley", "P1"),
    ]),
    ("Romex / Nico", "VERIFICAR", [
        ("Status liner y problemas de produccion (chat tecnico)", "Jorge Bruna", "P1"),
        ("Update tapas y liners", "Jorge Bruna", "P2"),
    ]),
    ("Daryza", "NO AVANZADO", [
        ("Lista 30+ MPs Urbina (11 mar) — cotizacion formal OVERDUE 10+ semanas", "Jennifer Segura", "P1"),
        ("MPs prioritarias: Lauril Eter Sulfato 82t, Ac. Sulfonico 58t, NaOH 50% 46t, PEAD 38t", "", "P1"),
        ("Confirmar reunion seguimiento con Urbina (jurbina@daryza.com)", "Jennifer Segura", "P2"),
    ]),
    ("Aurora Paint", "NO AVANZADO", [
        ("Seguimiento resinas epoxicas VYTA BPA — sin respuesta hace 2+ sem", "Jennifer Segura", "P1"),
        ("Reportar respuesta o silencio definitivo", "Jennifer Segura", "P2"),
    ]),
    ("Universal Colors", "VERIFICAR", [
        ("TiO2 mercado: Kronos Q1 2026 perdida menor; LyondellBasell vende negocio TiO2 a INEOS", "", "P2"),
        ("Mercado TiO2: demanda global blanda + inventarios elevados segun Kronos — monitorear impacto precio", "", "P2"),
        ("Erika/Murillo — TiO2 588 y oxidos de hierro: status", "Jennifer Segura", "P2"),
    ]),
    ("Qroma", "NO AVANZADO", [
        ("Carlos Baldion — neopreno, caucho clorado, parafina: sin contacto 2+ semanas", "Victor Alfaro", "P2"),
        ("Croma: posponer inclusion hasta julio (precios inestables)", "", "P3"),
    ]),
    ("Prospectos Pintura", "VERIFICAR", [
        ("Anipsa, Perupaint, Soprint, Interpaint — cold visits sin update", "Victor Alfaro", "P3"),
    ]),
    ("Plasticos", "VERIFICAR", [
        ("Tigre, Andinaplast, Inproplast, Nicoll — cera PE, TiO2, masterbatch: sin update", "Victor Alfaro", "P3"),
    ]),
    ("Mineria", "VERIFICAR", [
        ("Reunion Oscar Rosas — confirmar si se hizo o reprogramar", "Victor Alfaro", "P1"),
        ("MIBC, xantatos, lubricantes — ficha tecnica + pricing (pendiente)", "Andres Bruna", "P1"),
    ]),
    ("Oral Care", "VERIFICAR", [
        ("Status tubos, formula, equipos — Ruby / Oscar J.", "Andres Bruna", "P1"),
        ("Update empaque y mecanica tubos", "Jorge Bruna", "P2"),
    ]),
    ("Alimentos", "AVANZADO", [
        ("Reunion 30 abr realizada — action items extraidos (Read AI)", "Andres Bruna", "P1"),
        ("Portafolio sintetizado ~10 productos para ventas inmediatas (bloqueo Java)", "Andres Bruna", "P1"),
        ("Brenda — llamar para entender necesidades / Abrillantador: confirmar con Sebastian", "Jennifer Segura", "P2"),
        ("Pursuit, JAVA, Creafoods — acidos y especialidades: follow-up", "Victor Alfaro", "P2"),
    ]),
]

# ─── DOCX ──────────────────────────────────────────────────────────────
doc = Document()
for section in doc.sections:
    section.top_margin = Inches(0.8)
    section.bottom_margin = Inches(0.8)
    section.left_margin = Inches(1.0)
    section.right_margin = Inches(1.0)

# Titulo
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("AGENDA REVISION SEMANAL — BRUNA PERU")
run.bold = True
run.font.size = Pt(20)
run.font.color.rgb = NAVY

p2 = doc.add_paragraph()
p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
r2 = p2.add_run(f"Semana del {FECHA}  |  VCB S.A.C.")
r2.bold = True
r2.font.size = Pt(13)
r2.font.color.rgb = ACCENT

p3 = doc.add_paragraph()
p3.alignment = WD_ALIGN_PARAGRAPH.CENTER
r3 = p3.add_run("Confidencial — Uso Interno")
r3.italic = True
r3.font.size = Pt(9)
r3.font.color.rgb = GRAY

add_divider(doc)

# PARTE 1
add_heading(doc, "PARTE 1 — REVISION PENDIENTES (semana anterior)", level=1, color=NAVY)
doc.add_paragraph("Fuente: Read AI (30 abr), Gmail, iCloud, Google Alerts TiO2/Kronos.").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 — NOVEDADES DE LA SEMANA", level=1, color=NAVY)

add_heading(doc, "Market Intel", level=2, color=ACCENT)
add_bullet(doc, "TiO2 (Google Alert 24 may): Kronos Q1 2026 — perdida menor a lo esperado pero demanda blanda + inventarios altos. LyondellBasell cierra venta TiO2 a INEOS. Implicacion: mercado TiO2 presionado. Monitorear precios oferta Universal Colors.")
add_bullet(doc, "Reunion Bruna Peru Alimentos (30 abr, Read AI): pipeline alimenticio en revision. Bloqueo Java retrasa desarrollos internos. Se propone portafolio sintetizado ~10 productos para avanzar ventas. Abrillantador pendiente aprobacion Sebastian.")
add_bullet(doc, "Alta probabilidad cierre negocio potasio (K2CO3 Cafetal) en corto plazo — incorporar a proyecciones.")

add_heading(doc, "Alertas Operativas", level=2, color=ACCENT)
add_status_item(doc, "Cafetal/CargoFlex: liberacion carga + pago impuestos CON ILEANA — sin confirmar", "NO AVANZADO", "Carlos Artavia")
add_status_item(doc, "Daryza: cotizacion formal OVERDUE 10+ semanas desde lista Urbina (11 mar)", "NO AVANZADO", "Jennifer Segura")
add_status_item(doc, "Aurora Paint: sin respuesta VYTA BPA epoxicas — 2+ semanas silencio", "NO AVANZADO", "Jennifer Segura")
add_status_item(doc, "Portafolio Alimentos sintetizado pendiente para ventas en campo", "NUEVO", "Andres Bruna")
add_status_item(doc, "Excel clientes/productos aprobados pendiente de envio al equipo", "VERIFICAR", "Andres Bruna")

add_divider(doc)

# PARTE 3
add_heading(doc, "PARTE 3 — 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)

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

add_heading(doc, "HOY — Urgente", level=2, color=RED)
for item in [
    ("Carlos Artavia: Liberar carga Cafetal + confirmar pago impuestos con Ileana", "NO AVANZADO", "Carlos Artavia"),
    ("Jennifer Segura: Cotizacion formal Daryza — OVERDUE 10+ semanas", "NO AVANZADO", "Jennifer Segura"),
    ("Jennifer Segura: Follow-up Aurora Paint VYTA BPA (silencio 2+ sem)", "NO AVANZADO", "Jennifer Segura"),
    ("Andres Bruna: Enviar Excel clientes/productos aprobados al equipo", "VERIFICAR", "Andres Bruna"),
    ("Andres Bruna: Elaborar portafolio Alimentos ~10 productos", "VERIFICAR", "Andres Bruna"),
]:
    add_status_item(doc, item[0], item[1], indent_in=0.4)

add_heading(doc, "ESTA SEMANA", level=2, color=ORANGE)
for item in [
    "Victor: Confirmar reunion Mineria (Oscar Rosas) — realizada o reprogramar",
    "Victor: Follow-up Qroma/Baldion (neopreno, caucho)",
    "Jennifer: Llamar a Brenda (Alimentos); confirmar abrillantador con Sebastian",
    "Jennifer: Universal Colors — TiO2 update Murillo",
    "Jorge: Status liner Romex/Nico + update Oral Care tubos",
    "Carlos: Planificar 2da entrega 6,600 kg CargoFlex",
    "Vanessa: Org chart Alicorp + costos Policloropreno (OVERDUE 5 sem)",
]:
    add_status_item(doc, item, "VERIFICAR", indent_in=0.4)

add_heading(doc, "OVERDUE CRONICO", level=2, color=RED)
for tarea, resp, sem in [
    ("Cotizacion Daryza (lista recibida 11 mar)", "Jennifer Segura", "10+"),
    ("Org chart Alicorp actualizado + costos Policloropreno", "Vanessa Garcia", "5"),
    ("Inventario PO Norway", "Carlos Artavia", "4+"),
    ("Aurora Paint VYTA BPA — sin respuesta", "Jennifer Segura", "2+"),
]:
    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>
'''

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 - 25 May 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; }}
  .card {{ background: #1a2a3a; border-radius: 10px; padding: 14px; border: 1px solid #243647; }}
  .card-title {{ font-size: 0.95rem; font-weight: 700; color: #fff; margin-bottom: 8px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }}
  .badge {{ display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 0.7rem; font-weight: 700; }}
  .badge-HECHO {{ background: #1a5c36; color: #27AE60; border: 1px solid #27AE60; }}
  .badge-AVANZADO {{ background: #4a3f00; color: #F1C40F; border: 1px solid #F1C40F; }}
  .badge-VERIFICAR {{ background: #4a2c00; color: #E67E22; border: 1px solid #E67E22; }}
  .badge-NO-AVANZADO {{ background: #4a1515; color: #C0392B; border: 1px solid #C0392B; }}
  .badge-NUEVO {{ background: #2d1a4a; color: #8E44AD; border: 1px solid #8E44AD; }}
  .badge-OVERDUE {{ background: #4a0000; color: #ff4444; border: 1px solid #ff4444; }}
  .badge-P1 {{ background: #4a1515; color: #e74c3c; border: 1px solid #e74c3c; }}
  .badge-P2 {{ background: #4a2c00; color: #E67E22; border: 1px solid #E67E22; }}
  .badge-P3 {{ background: #1a2a3a; color: #7f8c8d; border: 1px solid #7f8c8d; }}
  .item-list {{ list-style: none; margin-top: 6px; }}
  .item-list li {{ display: flex; align-items: flex-start; gap: 6px; padding: 4px 0; border-bottom: 1px solid #1e3347; font-size: 0.82rem; line-height: 1.4; }}
  .item-list li:last-child {{ border-bottom: none; }}
  .item-text {{ flex: 1; color: #c5d5e4; }}
  .item-resp {{ color: #2E86C1; font-size: 0.75rem; font-style: italic; }}
  .news-card {{ background: #162030; border-radius: 8px; padding: 14px; border-left: 4px solid #2E86C1; margin-bottom: 12px; }}
  .news-card h4 {{ color: #2E86C1; font-size: 0.9rem; margin-bottom: 6px; }}
  .news-card p {{ color: #95a5a6; font-size: 0.82rem; line-height: 1.5; }}
  .news-card .tag {{ font-size: 0.7rem; background: #1B4F72; color: #85c1e9; padding: 2px 8px; border-radius: 10px; display: inline-block; margin-top: 6px; }}
  .alert-card {{ border-left-color: #C0392B; }}
  .alert-card h4 {{ color: #e74c3c; }}
  .resp-section {{ background: #1a2a3a; border-radius: 10px; padding: 14px; margin-bottom: 12px; border: 1px solid #243647; }}
  .resp-name {{ font-size: 1rem; font-weight: 700; color: #fff; margin-bottom: 3px; }}
  .resp-rol {{ color: #7fb3d3; font-size: 0.8rem; margin-bottom: 10px; }}
  .resp-items {{ list-style: none; }}
  .resp-items li {{ display: flex; align-items: flex-start; gap: 8px; padding: 5px 0; border-bottom: 1px solid #1e3347; font-size: 0.82rem; }}
  .resp-items li:last-child {{ border-bottom: none; }}
  .checkbox {{ width: 15px; height: 15px; border: 2px solid #2E86C1; border-radius: 3px; flex-shrink: 0; margin-top: 2px; }}
  .overdue-section {{ background: #1a0a0a; border: 1px solid #4a1515; border-radius: 10px; padding: 14px; margin: 24px 0; }}
  .overdue-title {{ color: #e74c3c; font-size: 1rem; font-weight: 700; margin-bottom: 12px; }}
  .footer {{ text-align: center; padding: 20px; color: #4a6278; font-size: 0.75rem; border-top: 1px solid #1e3347; margin-top: 24px; }}
  @media (max-width: 768px) {{ .grid {{ grid-template-columns: 1fr; }} .header h1 {{ font-size: 1.2rem; }} }}
</style>
</head>
<body>
<div class="header">
  <h1>&#127477;&#127466; BRUNA PERU &mdash; REVISION SEMANAL</h1>
  <div class="sub">VCB S.A.C. | Semana del 25 de mayo, 2026</div>
  <div class="meta">Generado: 25 May 2026 | Fuentes: Read AI (30 abr), Gmail, iCloud, Google Alerts TiO2/Kronos</div>
  <span class="conf">CONFIDENCIAL &mdash; Uso Interno Bruna Peru / VCB S.A.C.</span>
</div>

<div class="container">

<div class="section-title">&#128240; SECCION 1 &mdash; NOTICIAS Y RELEVANTES</div>

<div class="news-card">
  <h4>&#128202; TiO2 &mdash; Google Alert (24 may 2026)</h4>
  <p>Kronos Q1 2026: perdida menor a la esperada pero mercado TiO2 con demanda blanda e inventarios elevados. LyondellBasell completa venta negocio TiO2 + quimicos a INEOS. Derechos antidumping rebalancean flujos de comercio TiO2. <strong>Implicacion para Bruna Peru:</strong> presion sobre precios. Monitorear para Universal Colors y prospectos pintura.</p>
  <span class="tag">Universal Colors &middot; Pintura &middot; Mercado</span>
</div>

<div class="news-card">
  <h4>&#128203; Alimentos &mdash; Reunion 30 abr (Read AI)</h4>
  <p>Action items extraidos: Jennifer llama a Brenda; Jennifer evalua incorporacion de Oscar J. para presencia comercial; Andres envia Excel clientes/productos aprobados; Andres elabora portafolio Alimentos (~10 productos mientras se resuelve bloqueo Java); abrillantador pendiente confirmacion Sebastian (ligado a licitacion anual 2026). Alta prob. cierre potasio incorporar a proyecciones.</p>
  <span class="tag">Alimentos &middot; Jennifer Segura &middot; Andres Bruna</span>
</div>

<div class="news-card alert-card">
  <h4>&#9888; Daryza &mdash; OVERDUE 10+ semanas</h4>
  <p>Lista 30+ MPs de Jose Luis Urbina (jurbina@daryza.com) recibida el 11 mar. Prioridades: Lauril Eter Sulfato 70% (82,000 kg/ano), Ac. Sulfonico C8 (58,000 kg), NaOH 50% (46,000 kg), PEAD LH 735 (38,000 kg). <strong>Cotizacion formal NO enviada.</strong></p>
  <span class="tag">Daryza &middot; Jennifer Segura &middot; CRITICO</span>
</div>

<div class="news-card alert-card">
  <h4>&#9888; Cafetal &mdash; Carga Sin Liberar</h4>
  <p>1ra entrega 5,400 kg en coordinacion CargoFlex. Liberacion de carga + pago impuestos con Ileana pendientes. 6,600 kg restantes sin planificar. Alta probabilidad cierre potasio en corto plazo.</p>
  <span class="tag">Logistica &middot; Carlos Artavia &middot; P1</span>
</div>

<div class="section-title">&#128196; SECCION 2 &mdash; PENDIENTES POR CUENTA</div>
<div class="grid">
{cards_html}
</div>

<div class="section-title">&#128101; SECCION 3 &mdash; RESPONSABLES</div>
{resp_sections_html}

<div class="overdue-section">
  <div class="overdue-title">&#8987; OVERDUE CRONICO</div>
  <ul class="item-list">
    <li><span class="badge badge-OVERDUE">10+ sem</span> <div class="item-text">Cotizacion Daryza (lista recibida 11 mar)<br><span class="item-resp">&rarr; Jennifer Segura</span></div></li>
    <li><span class="badge badge-OVERDUE">5 sem</span> <div class="item-text">Org chart Alicorp actualizado + costos Policloropreno<br><span class="item-resp">&rarr; Vanessa Garcia</span></div></li>
    <li><span class="badge badge-OVERDUE">4+ sem</span> <div class="item-text">Inventario PO Norway<br><span class="item-resp">&rarr; Carlos Artavia</span></div></li>
    <li><span class="badge badge-OVERDUE">2+ sem</span> <div class="item-text">Aurora Paint VYTA BPA — sin respuesta<br><span class="item-resp">&rarr; Jennifer Segura</span></div></li>
  </ul>
</div>

</div>

<div class="footer">
  Generado por Causita (Hermes Agent) &middot; 25 May 2026 &middot; Confidencial &mdash; Bruna Peru / VCB S.A.C.<br>
  Fuentes: Gmail (andybruna@gmail.com), iCloud, Read AI (30 abr), Google Alerts TiO2/Kronos &middot; Sem del 19-25 may 2026
</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}")
