"""Divide un archivo .vcf en sus VCARDs individuales.

Funcion pura: sin I/O, sin estado, determinista. Recibe el texto completo de un
archivo .vcf (que puede contener N tarjetas concatenadas) y devuelve una lista
de strings, cada uno un VCARD completo (BEGIN:VCARD..END:VCARD) ya stripeado.
Solo usa stdlib (re).
"""

import re

_VCARD_RE = re.compile(r"BEGIN:VCARD.*?END:VCARD", re.DOTALL)


def split_vcards(vcf_text: str) -> list:
    """Divide el texto de un .vcf en VCARDs individuales.

    Args:
        vcf_text: contenido completo del archivo .vcf, con una o varias tarjetas
            concatenadas. Tolera saltos de linea LF o CRLF.

    Returns:
        Lista de strings. Cada elemento es un VCARD completo
        ('BEGIN:VCARD'..'END:VCARD') stripeado de espacios al inicio/fin.
        Lista vacia si no hay ninguna tarjeta.
    """
    if not vcf_text:
        return []
    return [m.strip() for m in _VCARD_RE.findall(vcf_text)]
