"""
Las reglas de estilo que no se pueden dejar libradas a la revisión.

Una regla escrita en `AGENTS.md` y en ningún otro lado se cumple mientras
alguien se acuerde. `max-w-prose` estuvo prohibido desde que se escribió la
regla, y aun así había **treinta** apariciones repartidas en trece archivos:
nadie las puso de mala fe, se copiaron de la línea de al lado.

Lo que hace peligrosa a ésta en particular es que no rompe nada. Una tarjeta con
`max-w-prose` dibuja, contesta y pasa cualquier prueba; lo único que hace es
recortar el párrafo a 65 caracteres adentro de una caja que mide el triple, y el
resultado —texto flaco y chiquito en una tarjeta grande— se lee como un
descuido de diseño y no como una clase de más. Ninguna prueba podía fallar por
eso, así que la única defensa posible es ésta.

**Se prohíbe la cadena entera, también en comentarios.** Es más duro de lo
necesario y es a propósito: el motivo por el que la regla existe cabe en una
oración —el ancho de un bloque de texto lo decide el contenedor que lo
contiene—, y esa oración vive en `AGENTS.md`, que es donde se la busca. Un
comentario que explica la ausencia de una clase en el archivo donde no está es
justamente lo que después alguien copia.
"""

from pathlib import Path

from django.conf import settings

FRONTEND = Path(settings.BASE_DIR) / 'frontend'

#: Lo que no se escribe, y por qué. La clave es la cadena prohibida.
FORBIDDEN = {
    'max-w-prose': (
        'El ancho de un bloque de texto lo decide el contenedor que lo contiene, '
        'no el párrafo. Para que las líneas no queden pegadas al borde alcanza '
        'con text-pretty.'
    ),
}

#: Dónde se busca. No entran `node_modules` ni lo que produce el build.
SOURCES = ('*.tsx', '*.ts', '*.css')


def sources() -> list[Path]:
    return sorted(
        path
        for pattern in SOURCES
        for path in FRONTEND.rglob(pattern)
        if 'node_modules' not in path.parts
    )


def test_no_forbidden_class_survives_in_the_frontend():
    offenders: dict[str, list[str]] = {}

    for path in sources():
        body = path.read_text(encoding='utf-8')
        for forbidden in FORBIDDEN:
            if forbidden in body:
                where = path.relative_to(FRONTEND).as_posix()
                offenders.setdefault(forbidden, []).append(where)

    assert not offenders, '\n'.join(
        f'«{forbidden}» aparece en {", ".join(files)}. {FORBIDDEN[forbidden]}'
        for forbidden, files in offenders.items()
    )
