"""
Registro y trazabilidad de todo lo que hace el agente (sección 8 del
documento .docx). Se guarda en un CSV simple por defecto; si Track Mar
prefiere guardarlo en su propia base, reemplazar `registrar()` por un INSERT
a la tabla que corresponda.
"""
import csv
import os
from datetime import datetime, timedelta
import config

CAMPOS = ["timestamp", "tipo", "sucursal", "cliente_id", "cliente_nombre",
          "referencia", "canal", "resultado", "dry_run", "detalle"]


def registrar(tipo, sucursal="", cliente_id="", cliente_nombre="", referencia="",
              canal="", resultado="", detalle=""):
    existe = os.path.exists(config.LOG_PATH)
    with open(config.LOG_PATH, "a", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=CAMPOS)
        if not existe:
            writer.writeheader()
        writer.writerow({
            "timestamp": datetime.now().isoformat(timespec="seconds"),
            "tipo": tipo,
            "sucursal": sucursal,
            "cliente_id": cliente_id,
            "cliente_nombre": cliente_nombre,
            "referencia": referencia,
            "canal": canal,
            "resultado": resultado,
            "dry_run": config.DRY_RUN,
            "detalle": detalle,
        })


def ya_se_contacto_recientemente(cliente_id, referencia) -> bool:
    """Anti-duplicados: True si ya le mandamos un mensaje a este cliente por
    esta misma cotización/contacto en los últimos N días (config.py)."""
    if not os.path.exists(config.LOG_PATH):
        return False
    limite = datetime.now() - timedelta(days=config.DIAS_MINIMOS_ENTRE_MENSAJES_AL_MISMO_CLIENTE)
    with open(config.LOG_PATH, encoding="utf-8") as f:
        for fila in csv.DictReader(f):
            if (fila["cliente_id"] == str(cliente_id) and fila["referencia"] == str(referencia)
                    and fila["canal"] == "whatsapp_cliente"
                    and datetime.fromisoformat(fila["timestamp"]) > limite):
                return True
    return False
