from bs4 import BeautifulSoup
import re

def process_email(msg):

    body = None

    # Obtener el cuerpo del email
    if msg.is_multipart():
        for part in msg.walk():
            if part.get_content_type() in ["text/plain", "text/html"]:
                payload = part.get_payload(decode=True)

                try:
                    body = payload.decode("utf-8")
                except:
                    body = payload.decode("latin-1", errors="ignore")

                if body:
                    break
    else:
        payload = msg.get_payload(decode=True)

        try:
            body = payload.decode("utf-8")
        except:
            body = payload.decode("latin-1", errors="ignore")

    if not body:
        return {"Error": "No se pudo leer el cuerpo del correo"}

    # Limpiar HTML
    soup = BeautifulSoup(body, "html.parser")
    text = soup.get_text("\n")

    # función auxiliar
    def extract(pattern):
        m = re.search(pattern, text, re.IGNORECASE)
        return m.group(1).strip() if m else None

    # extraer campos
    nombre_completo = extract(r"Nombre:\s*(.+)")
    telefono = extract(r"Tel[^\n]*:\s*([^\n]+)")
    correo = extract(r"Email:\s*([^\s]+@[^\s]+)")
    modelo = extract(r"Modelo.*?::\s*(.+)")
    comentario = extract(r"Comentario:\s*(.+)")

    # limpiar teléfono
    if telefono:
        telefono = re.sub(r"\D", "", telefono)

    # separar nombre y apellido
    nombre = ""
    apellido = ""

    if nombre_completo:
        partes = nombre_completo.split()

        if len(partes) >= 2:
            nombre = partes[0]
            apellido = " ".join(partes[1:])
        else:
            nombre = nombre_completo

    # construir comentario final
    comentario_final = ""

    if modelo:
        comentario_final += f"Modelo {modelo}"

    if comentario:
        if comentario_final:
            comentario_final += " - "
        comentario_final += comentario

    # construir asunto
    asunto = "Contacto Web Olas"

    if modelo:
        asunto += f" Modelo {modelo}"

    data = {
        "ID": msg.get("Message-ID"),
        "Asunto": asunto,
        "Nombre": nombre,
        "Apellido": apellido,
        "RUT": "",
        "Correo": correo,
        "Teléfono": telefono,
        "Proyecto": "Condominio Olas",
        "Comentario": comentario_final
    }

    return data