"""Extrae direcciones de email de un texto, con offsets."""

import re

_EMAIL_REGEX = re.compile(
    r"(?<![A-Za-z0-9._%+-])"
    r"[A-Za-z0-9._%+-]+"
    r"@"
    r"[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?"
    r"(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)+"
    r"(?![A-Za-z0-9._%+-])"
)


def extract_emails(text: str) -> list[dict]:
    """Extrae emails (RFC 5322 simplificado) con offsets.

    No valida MX ni que el TLD exista — solo estructura sintactica. La
    parte local acepta letras, digitos y `._%+-`. El dominio exige al
    menos un punto y termina en componente alfanumerico.
    """
    return [
        {
            "value": m.group(0),
            "start": m.start(),
            "end": m.end(),
            "type": "email",
        }
        for m in _EMAIL_REGEX.finditer(text)
    ]
