"""Normaliza strings para joins sin dependencias externas."""

import re
import unicodedata
from typing import Iterable


def normalize_for_join(values: Iterable) -> list:
    """Normaliza strings para joins: upper + sin diacriticos + solo [A-Z0-9 ] + colapsa espacios.

    Para cada valor: convierte a string, upper, elimina diacriticos NFD,
    reemplaza caracteres que no sean letras/numeros/espacios por cadena vacia,
    colapsa espacios multiples, trim. None o NaN se convierten a cadena vacia.

    No depende de pandas; trabaja con cualquier iterable de strings o None.

    Args:
        values: Iterable de strings o None. Puede ser lista, generador, Serie, etc.

    Returns:
        Lista de strings normalizados. None/NaN se convierten a "".
    """
    result = []
    for v in values:
        if v is None:
            result.append("")
            continue
        # Detectar NaN de numpy/pandas sin importarlos
        try:
            if v != v:  # NaN != NaN
                result.append("")
                continue
        except (TypeError, ValueError):
            pass
        texto = str(v).upper()
        texto = "".join(
            c for c in unicodedata.normalize("NFD", texto)
            if unicodedata.category(c) != "Mn"
        )
        texto = re.sub(r"[^A-Z0-9\s]", "", texto)
        texto = re.sub(r"\s+", " ", texto)
        texto = texto.strip()
        result.append(texto)
    return result
