"""Extrae identificadores CVE de un texto, con offsets."""

import re

_CVE_REGEX = re.compile(
    r"(?<![A-Za-z0-9])"
    r"CVE-\d{4}-\d{4,7}"
    r"(?![A-Za-z0-9])"
)


def extract_cve_ids(text: str) -> list[dict]:
    """Extrae IDs CVE con formato `CVE-YYYY-NNNN+`.

    Acepta el rango oficial (NVD): año de 4 digitos seguido de 4 a 7
    digitos. No valida que el CVE exista en NVD. Insensible a posicion
    (puede aparecer al inicio, en medio o al final del texto).
    """
    return [
        {
            "value": m.group(0),
            "start": m.start(),
            "end": m.end(),
            "type": "cve_id",
        }
        for m in _CVE_REGEX.finditer(text)
    ]
