"""Normalizaciones de datos ingresados en los formularios públicos."""
import re
import unicodedata


def looks_like_beneficiary_rut(field_code: str, label: str, value: str) -> bool:
    """Un número escrito en «RUT o razón social» debe pasar dígito verificador."""
    name = unicodedata.normalize("NFKD", f"{field_code} {label}").encode("ascii", "ignore").decode().lower()
    return "rut" in name and "razon" in name and "social" in name and bool(re.fullmatch(r"[0-9.kK-]+", value.strip()))


def normalize_chilean_phone(value: str) -> str:
    digits = re.sub(r"[\s().-]", "", value.strip())
    if digits.startswith("+"):
        digits = digits[1:]
    if not digits.isdigit():
        raise ValueError("Teléfono: utiliza solo números y el prefijo +56 opcional")
    if digits.startswith("56") and len(digits) == 11:
        digits = digits[2:]
    if len(digits) != 9 or digits[0] not in "23456789" or len(set(digits)) == 1:
        raise ValueError("Teléfono chileno inválido: ingresa 9 dígitos, con +56 opcional")
    return "+56" + digits
