"""Normalizacao de HTML para comparar respostas 7.4 x 8.3 sem ruido."""
import re

_REGRAS = [
    # tokens CSRF (input hidden e meta)
    (re.compile(r'(name="_csrf[^"]*"\s+value=")[^"]*(")'), r"\1~\2"),
    (re.compile(r'(value=")[^"]*("\s+name="_csrf[^"]*")'), r"\1~\2"),
    (re.compile(r'(<meta name="csrf-token" content=")[^"]*(")'), r"\1~\2"),
    (re.compile(r'(nonce=")[^"]*(")'), r"\1~\2"),
    # hash do diretorio de assets publicados pelo Yii e cache-busting
    (re.compile(r"/assets/[0-9a-f]{6,}/"), "/assets/~/"),
    (re.compile(r"\?(v|t)=\d+"), "?~"),
    # datas/horas
    (re.compile(r"\b\d{2}/\d{2}/\d{4}(\s+\d{2}:\d{2}(:\d{2})?)?"), "~data~"),
    (re.compile(r"\b\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2}(:\d{2})?(\.\d+)?(Z|[+-]\d{2}:?\d{2})?)?"), "~data~"),
    # espacos
    (re.compile(r"\s+"), " "),
]


def normalizar_html(html: str) -> str:
    for padrao, troca in _REGRAS:
        html = padrao.sub(troca, html)
    return html.strip()
