"""
Arma y envía los reportes internos (sección 7 del documento .docx):
- Alerta diaria: a cada encargado de sucursal (solo lo suyo) + a Osvaldo (todo).
- Resumen semanal: a Osvaldo, línea gerencial y encargados, con la foto completa.

Implementado por email (SMTP) porque es lo más simple de tener funcionando ya
en cualquier empresa. Si Track Mar prefiere que las alertas internas también
lleguen por WhatsApp, se puede reusar whatsapp.enviar_plantilla() acá mismo
con una plantilla interna (no dirigida a clientes).
"""
import smtplib
from email.mime.text import MIMEText
import os
import config


def _texto_item_cotizacion(item):
    return f"  - Cotización #{item['cotizacion_id']} — cliente {item.get('cliente_nombre', item['cliente_id'])}"


def _texto_item_contacto(item):
    return f"  - Contacto en frío #{item['contacto_id']} — cliente {item.get('cliente_nombre', item['cliente_id'])}"


def armar_alerta_diaria(sucursal_nombre, cotizaciones_caidas, contactos_caidos, visitas_sin_resultado):
    lineas = [f"Alerta diaria — {sucursal_nombre} — Agente de Seguimiento Comercial (Track Mar)", ""]
    if cotizaciones_caidas:
        lineas.append(f"Cotizaciones sin seguimiento hace más de {config.UMBRAL_DIAS_COTIZACION_SIN_ACTIVIDAD} días ({len(cotizaciones_caidas)}):")
        lineas += [_texto_item_cotizacion(i) for i in cotizaciones_caidas]
        lineas.append("")
    if contactos_caidos:
        lineas.append(f"Contactos en frío sin cotización hace más de {config.UMBRAL_HORAS_CONTACTO_FRIO_SIN_COTIZACION} horas ({len(contactos_caidos)}):")
        lineas += [_texto_item_contacto(i) for i in contactos_caidos]
        lineas.append("")
    if visitas_sin_resultado:
        lineas.append(f"Visitas sin resultado cargado ({len(visitas_sin_resultado)}):")
        lineas += [f"  - Visita #{i['visita_id']} del {i['fecha']}" for i in visitas_sin_resultado]
        lineas.append("")
    if not (cotizaciones_caidas or contactos_caidos or visitas_sin_resultado):
        lineas.append("Sin novedades: los 3 ejes están al día en esta sucursal. ✔")
    return "\n".join(lineas)


def armar_resumen_semanal(resumen_por_sucursal):
    """resumen_por_sucursal: lista de dicts con
    {sucursal, semaforo_eje1, semaforo_eje2, semaforo_eje3, contactos_mes, objetivo_mes}"""
    lineas = ["Resumen semanal — Agente de Seguimiento Comercial (Track Mar / División Repuestos)", ""]
    for s in resumen_por_sucursal:
        lineas.append(
            f"{s['sucursal']}: Eje1={s['semaforo_eje1']} · Eje2={s['semaforo_eje2']} · "
            f"Eje3={s['semaforo_eje3']} ({s['contactos_mes']}/{s['objetivo_mes']} contactos en frío este mes)"
        )
    return "\n".join(lineas)


def enviar_email(destinatario_email, asunto, cuerpo):
    if config.DRY_RUN:
        print(f"[DRY-RUN] Email a {destinatario_email} — {asunto}\n{cuerpo}\n{'-'*60}")
        return
    smtp_host = os.environ.get("SMTP_HOST")
    smtp_port = int(os.environ.get("SMTP_PORT", "587"))
    smtp_user = os.environ.get("SMTP_USER")
    smtp_password = os.environ.get("SMTP_PASSWORD")
    remitente = os.environ.get("SMTP_REMITENTE", smtp_user)

    msg = MIMEText(cuerpo, _charset="utf-8")
    msg["Subject"] = asunto
    msg["From"] = remitente
    msg["To"] = destinatario_email

    with smtplib.SMTP(smtp_host, smtp_port) as server:
        server.starttls()
        server.login(smtp_user, smtp_password)
        server.sendmail(remitente, [destinatario_email], msg.as_string())
